beautypg.com

Sun Microsystems Netra CP2500 User Manual

Page 64

background image

50

Netra CP2500 Board Programming Guide • March 2007

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);

CODE EXAMPLE 3-4

Write Action on User Flash Device (Continued)