/***************************************************************************
 * Copyright 1995, Technion, Israel Institute of Technology
 * Electrical Eng, Software Lab.
 * Author:    Michael Veksler.
 ***************************************************************************
 * File:      shm_block.ch
 * Purpose:   treat a shared memory block.
 ***************************************************************************
 */
#ifndef __WINE_SHM_BLOCK_H
#define __WINE_SHM_BLOCK_H
#include <sys/shm.h>
#include "wintypes.h"
#define SEGSIZE                 0x10000 /* 64 */ 
#define SHM_GRANULARITY         SEGSIZE
#define SHM_MINBLOCK            SHM_GRANULARITY
#define SHM_MAXBLOCK            (((int)SHMMAX/(int)SHM_GRANULARITY)*  \
				 SHM_GRANULARITY)
#define PTR2REL(block,ptr) (REL_PTR) ( (char *) (ptr) - (char *) (block) )
#define REL2PTR(block,rel) (void *) ( (char *) (block) + (rel) )

typedef  int REL_PTR;

/* full info for each shm block. */
struct shm_block {
	/* private */
	int next_shm_id;	   /* IPC shm ID (for initial linking) */
    
	/* public (read only) */
	int size;		   /* size of the shm block */
	int free;		   /* how much of the block is free */
        int proc_idx;		   /* The index of the owner */
	
	/* public - writable for shm_fragment */
	REL_PTR free_list;	   /* first item in the free list */
};

/* used for mapping local attachments */
struct local_shm_map {
	struct local_shm_map *next;
	int shm_id;
	int proc_idx;
	
	/* 32 bit pointer to the beginning of the block */
	struct shm_block *ptr;
};
extern struct local_shm_map *shm_map;
void shm_setup_block(struct shm_block *block, REL_PTR first, int size);

/* shm_create_block:
 *   allocate and setup a new block:
 *   first - first non header byte.
 *   size  - block size (in bytes).
 *   shm_id- IPC shared memory ID.
 */
struct shm_block *shm_create_block(REL_PTR first, int size, int *shm_id);

/* shm_locate_block:
 *   locate existing block according to shm_id,
 *   Attach the block if needed. Assume the shm_id is wine's
 *   Set selectors also.
 */
struct shm_block *shm_locate_block(int shm_id, struct local_shm_map *map);

/* shm_locate_attached_block: 
 *   locate existing block according to shm_id,
 *   Blocks are never attached.
 * if proc_idx is not NULL, it will be set to owner's index.
 * map - localy mapped info about block may be NULL;
 */
struct shm_block *shm_locate_attached_block(int shm_id, 
					    struct local_shm_map *map);

/* shm_attach_block: attach existing shm block, setup selectors
 * shm_id - id of the block to attach.
 * proc_idx - if not -1, puts this data into local mapping
 * map - localy mapped info about this block. (may be NULL)
 * NOTE: same block can be attached many times
 */
struct shm_block *shm_attach_block(int shm_id, int proc_idx,
				   struct local_shm_map *map);

/* delete chain of shm blocks (pointing to each other */
void shm_delete_chain(int *shmid);

#endif /* __WINE_SHM_BLOCK_H */
