|
|
#ifndef _MEMORY_H_
|
#ifndef _MEMORY_H_
|
#define _MEMORY_H_
|
#define _MEMORY_H_
|
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
struct address_t {
|
struct address_t {
|
|
|
size_t physical_address;
|
size_t physical_address;
|
void *virtual_address;
|
void *virtual_address;
|
size_t size;
|
size_t size;
|
|
|
};
|
};
|
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
struct mem_t {
|
struct mem_t {
|
|
|
struct list_head list;
|
struct list_head list;
|
dma_addr_t dma_handle;
|
dma_addr_t dma_handle;
|
void *cpu_addr;
|
void *cpu_addr;
|
size_t size;
|
size_t size;
|
|
|
};
|
};
|
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
struct dma_channel {
|
struct dma_channel {
|
int m_Number;
|
int m_Number;
|
int m_Use;
|
int m_Use;
|
struct pci_dev *m_pci;
|
struct pci_dev *m_pci;
|
spinlock_t m_MemListLock;
|
spinlock_t m_MemListLock;
|
atomic_t m_MemListCount;
|
atomic_t m_MemListCount;
|
struct list_head m_MemList;
|
struct list_head m_MemList;
|
struct mem_t m_MemStub;
|
struct mem_t m_MemStub;
|
};
|
};
|
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
|
typedef struct _SHARED_PHYSMEMORY_DESCRIPTION {
|
|
void *PhysAddress; // OUT - user memory address
|
|
void *KernAddress; // OUT - user memory address
|
|
void *UserAddress; // OUT - user memory address
|
|
} SHARED_PHYSMEMORY_DESCRIPTION, *PSHARED_PHYSMEMORY_DESCRIPTION;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
typedef struct _SHARED_MEMORY_DESCRIPTION {
|
|
|
|
void* SystemAddress; // адрес блока памяти выделенного в пространстве ядра
|
|
dma_addr_t LogicalAddress; // физический адрес блока памяти выделенного в пространстве ядра
|
|
struct page** LockedPages; // указатели на страницы блока памяти выделенного в пространстве пользователя
|
|
size_t PageCount; // количество страниц составляющи блок памяти выделенный в пространстве пользователя
|
|
|
|
} SHARED_MEMORY_DESCRIPTION, *PSHARED_MEMORY_DESCRIPTION;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
struct pex_device;
|
struct pex_device;
|
struct memory_block;
|
struct memory_block;
|
|
struct CDmaChannel;
|
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
int lock_pages( void *va, u32 size );
|
int lock_pages( void *va, u32 size );
|
int unlock_pages( void *va, u32 size );
|
int unlock_pages( void *va, u32 size );
|
void* allocate_memory_block(struct pex_device *brd, size_t block_size, dma_addr_t *dma_addr);
|
void* allocate_memory_block(struct pex_device *brd, size_t block_size, dma_addr_t *dma_addr);
|
int free_memory_block(struct pex_device *brd, struct memory_block mb);
|
int free_memory_block(struct pex_device *brd, struct memory_block mb);
|
|
int lock_user_memory( SHARED_MEMORY_DESCRIPTION *MemDscr, void* userSpaceAddress, size_t userSpaceSize );
|
|
int unlock_user_memory( SHARED_MEMORY_DESCRIPTION *MemDscr );
|
|
|
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
|
|
#endif //_MEMORY_H_
|
#endif //_MEMORY_H_
|
|
|