📄 lambdrv.c
字号:
/* lambDrv.c - simple (baby) ram disk driver */#include "vxWorks.h"#include "blkIo.h"#include "ioLib.h"#include "iosLib.h"#include "memLib.h"#define BLK_SIZE 512typedef struct /* LAMB_DEV - ram disk device descriptor */ { BLK_DEV lamb_blkdev; /* generic block device structure */ char *lamb_addr; /* memory location of the ram disk */ } LAMB_DEV;/* FORWARD DECLARATIONS */LOCAL STATUS lambIoctl ();LOCAL STATUS lambBlkRd ();LOCAL STATUS lambBlkWrt ();STATUS lambDrv () { return (OK); /* no initialization required */ }BLK_DEV *lambDevCreate (nBlocks) int nBlocks; /* Number of blocks on this device */ { FAST LAMB_DEV *pLambDev; /* ptr to created LAMB_DEV struct */ FAST BLK_DEV *pBlkDev; /* ptr to BLK_DEV struct in LAMB_DEV */ /* Set up defaults for any values not specified */ if (nBlocks == 0) return (NULL); /* Allocate a LAMB_DEV structure for device */ pLambDev = (LAMB_DEV *) malloc (sizeof (LAMB_DEV)); if (pLambDev == NULL) return (NULL); /* no memory */ /* Initialize BLK_DEV structure (in LAMB_DEV) */ pBlkDev = &pLambDev->lamb_blkdev; pBlkDev->bd_nBlocks = nBlocks; /* number of blocks */ pBlkDev->bd_bytesPerBlk = BLK_SIZE; /* bytes per block */ pBlkDev->bd_blksPerTrack = nBlocks; /* blocks per track */ pBlkDev->bd_nHeads = 1; /* one "head" */ pBlkDev->bd_removable = FALSE; /* not removable */ pBlkDev->bd_retry = 0; /* retry count */ pBlkDev->bd_mode = UPDATE; /* initial mode for device */ pBlkDev->bd_readyChanged = TRUE; /* new ready status */ pBlkDev->bd_blkRd = lambBlkRd; /* read block function */ pBlkDev->bd_blkWrt = lambBlkWrt; /* write block function */ pBlkDev->bd_ioctl = lambIoctl; /* ioctl function */ pBlkDev->bd_reset = NULL; /* no reset function */ pBlkDev->bd_statusChk = NULL; /* no check-status function */ /* Initialize remainder of device struct */ pLambDev->lamb_addr = (char *) malloc ((UINT) (BLK_SIZE * nBlocks)); if (pLambDev->lamb_addr == NULL) { free ((char *) pLambDev); return (NULL); /* no memory */ } return (&pLambDev->lamb_blkdev); }LOCAL STATUS lambIoctl (pLambDev, function, arg) LAMB_DEV *pLambDev; /* device structure pointer */ int function; /* function code */ int arg; /* some argument */ { FAST int status; /* returned status value */ switch (function) { case FIODISKFORMAT: status = OK; break; default: errnoSet (S_ioLib_UNKNOWN_REQUEST); status = ERROR; } return (status); }LOCAL STATUS lambBlkRd (pLambDev, startBlk, numBlks, pBuffer) FAST LAMB_DEV *pLambDev; /* pointer to device desriptor */ int startBlk; /* starting block number to read */ int numBlks; /* number of blocks to read */ char *pBuffer; /* pointer to buffer to receive data */ { /* Read the block(s) */ bcopy ((pLambDev->lamb_addr + (startBlk * BLK_SIZE)), pBuffer, BLK_SIZE * numBlks); return (OK); }LOCAL STATUS lambBlkWrt (pLambDev, startBlk, numBlks, pBuffer) FAST LAMB_DEV *pLambDev; /* pointer to device desriptor */ int startBlk; /* starting block number to write */ int numBlks; /* number of blocks to write */ char *pBuffer; /* pointer to buffer of data to write */ { /* Write the block(s) */ bcopy (pBuffer, (pLambDev->lamb_addr + (startBlk * BLK_SIZE)), BLK_SIZE * numBlks); return (OK); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -