CODE EXAMPLE 3-4Write Action on User Flash Device (Continued)

int ufd0;

uflash_if_t ufif0; char *buf0;

char *module; static int uflash_init() {

char *buf0 = malloc(ufif0.info.blk_size); if (!buf0) {

printf("%s: cannot allocate memory\n", module); return(-1);

}

/* open device */

if ((ufd0 = open(uflash0, O_RDWR)) == -1 ) { perror("uflash0: ");

exit(1);

}

/* get uflash sizes */

if (ioctl(ufd0, UIOCIBLK, &ufif0) == -1 ) { perror("ioctl(ufd0, UIOCIBLK): "); exit(1);

}

if (ufd0) {

printf("%s: \n", uflash0);

printf("manfacturer id = 0x%p\n", ufif0.info.mfr_id); printf("device id = 0x%p\n", ufif0.info.dev_id); printf("number of blocks = 0x%p", ufif0.info.blk_num); printf("block size = 0x%p" ufif0.info.blk_size);

}

}

static int

uflash_uninit() { if (ufd0)

close(ufd0);

cleanup: if (buf0)

free(buf0);

}

static int uflash_write() {

int i;

/* write some pattern to the buffers */

for (i = 0; i < ufif0.info.blk_size; i += sizeof(int)) *((int *) (buf0 + i)) = 0xDEADBEEF;

/* write block 0 of user flash */

if (pwrite(ufd0, buf0, ufif0.info.blk_size, 0) != ufif0.info.blk_size) perror("uflash0:write");

return(0);

50 Netra CP2500 Board Programming Guide • March 2007

Page 64
Image 64
Sun Microsystems CP2500 manual Code Example 3-4Write Action on User Flash Device