Linux Audio

Check our new training course

Loading...
#ifndef _LINUX_SHM_H_
#define _LINUX_SHM_H_
#include <linux/ipc.h>

struct shmid_ds {
	struct	ipc_perm shm_perm;	/* operation perms */
	int	shm_segsz;		/* size of segment (bytes) */
	time_t	shm_atime;		/* last attach time */
	time_t	shm_dtime;		/* last detach time */
	time_t	shm_ctime;		/* last change time */
	unsigned short	shm_cpid;	/* pid of creator */
	unsigned short	shm_lpid;	/* pid of last operator */
	short	shm_nattch;		/* no. of current attaches */
	/* the following are private */
	unsigned short   shm_npages;  /* size of segment (pages) */
	unsigned long   *shm_pages;   /* array of ptrs to frames -> SHMMAX */ 
	struct shm_desc *attaches;    /* descriptors for attaches */
};

/* mode for attach */
#define	SHM_RDONLY	010000	/* read-only access */
#define	SHM_RND		020000	/* round attach address to SHMLBA boundary */
#define	SHM_REMAP	040000	/* take-over region on attach */

/* super user shmctl commands */
#define SHM_LOCK 	11
#define SHM_UNLOCK 	12

struct	shminfo {
    int shmmax;	
    int shmmin;	
    int shmmni;	
    int shmseg;	
    int shmall;	
};

#define SHM_RANGE_START	0x40000000
#define SHM_RANGE_END	0x60000000

				/* _SHM_ID_BITS is a variable you can adjust to */
				/* tune the kernel.  It determines the value of */
				/* SHMMNI, which specifies the maximum no. of */
				/* shared segments (system wide).  SRB. */
#define _SHM_ID_BITS	7		/* keep as low as possible */
					/* a static array is declared */
					/* using SHMMNI */

#define __SHM_IDX_BITS	(BITS_PER_PTR-2-SHM_IDX_SHIFT)

/* !!!!!!!?????
 * Why reserve the two (2) high bits of the signature (shm_sgn) field?
 * Since, as far as I can see, only the high bit is used (SHM_READ_ONLY).
 *						SRB.
 */

#define _SHM_IDX_BITS	(__SHM_IDX_BITS+PAGE_SHIFT>=BITS_PER_PTR?\
 BITS_PER_PTR-PAGE_SHIFT-1:__SHM_IDX_BITS)	/* sanity check */

/* not present page table entry format bit 0 is 0, low byte defined in mm.h */
#define SHM_ID_SHIFT	8
#define SHM_ID_MASK	((1<<_SHM_ID_BITS)-1)
#define SHM_IDX_SHIFT	(SHM_ID_SHIFT+_SHM_ID_BITS)
#define SHM_IDX_MASK	((1<<_SHM_IDX_BITS)-1)
#define SHM_READ_ONLY	(1<<(BITS_PER_PTR-1))

#define SHMMAX 0x3fa000				/* max shared seg size (bytes) */
#define SHMMIN 1	 /* really PAGE_SIZE */	/* min shared seg size (bytes) */
#define SHMMNI (1<<_SHM_ID_BITS)		/* max num of segs system wide */
#define SHMALL (1<<(_SHM_IDX_BITS+_SHM_ID_BITS))/* max shm system wide (pages) */
#define	SHMLBA 0x1000				/* attach addr a multiple of this */
#define SHMSEG SHMMNI				/* max shared segs per process */

#ifdef __KERNEL__

/* shm_mode upper byte flags */
#define	SHM_DEST	01000	/* segment will be destroyed on last detach */
#define SHM_LOCKED      02000   /* segment will not be swapped */

/* ipcs ctl commands */
#define SHM_STAT 	13
#define SHM_INFO 	14
struct shm_info {
	int   used_ids;
	ulong shm_tot; /* total allocated shm */
	ulong shm_rss; /* total resident shm */
	ulong shm_swp; /* total swapped shm */
	ulong swap_attempts;
	ulong swap_successes;
};


/*
 * Per process internal structure for managing segments.
 * A shmat will add to and shmdt will remove from the list.
 */
struct	shm_desc {
	struct task_struct *task;     /* attacher */
	unsigned long shm_sgn;        /* signature for this attach */
	unsigned long start;   /* virt addr of attach, multiple of SHMLBA */
	unsigned long end;            /* multiple of SHMLBA */
	struct shm_desc *task_next;   /* next attach for task */
	struct shm_desc *seg_next;    /* next attach for segment */
};

#endif /* __KERNEL__ */

#endif /* _LINUX_SHM_H_ */


pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy