/*
 * Copyright (c) 2026, Chloe M.
 * Provided under the BSD-3 clause.
 *
 * Description: Process management
 * Author:      Chloe M.
 */

#ifndef _PS_PROCESS_H_
#define _PS_PROCESS_H_ 1

#include <hal/mmu.h>
#include <ptapi/status.h>
#include <ptdef.h>

/* Maximum length of process name */
#define PS_NAME_MAX 64

/* Pool tag for process allocations */
#define PS_POOL_TAG 'PS'

/* Process flags */
#define PS_USER BIT(0)   /* Set if user-level */

/*
 * Represents a running process on the machine
 *
 * @Name:       Name of process
 * @Pid:        Process ID
 * @Flags:      Initialization flags
 * @Vas:        Virtual address space of process
 */
typedef struct _PROCESS {
    CHAR Name[PS_NAME_MAX];
    UQUAD Pid;
    ULONG Flags;
    MMU_VAS Vas;
} PROCESS;

/*
 * Allocate and create a new process descriptor
 *
 * @Name:   Name of process
 * @Flags:  Initialization flags of process
 * @Result: Result is written here
 */
PT_STATUS PsCreateProcess(const CHAR *Name, ULONG Flags, PROCESS **Result);

#endif  /* !_PS_PROCESS_H_ */
