static void event_set_all(ACL_EVENT *eventp) { EVENT_KERNEL *ev = (EVENT_KERNEL *) eventp; ACL_EVENT_FDTABLE *fdp; int i; /* 优先处理添加读/写监控任务, 这样可以把中间的 ADD 状态转换成正式状态 */ eventp->fdcnt_ready = 0; if (eventp->present - eventp->last_check >= eventp->check_inter) { eventp->last_check = eventp->present; event_check_fds(eventp); } /* 处理任务项 */ while (1) { ACL_RING *r = acl_ring_pop_head(&ev->fdp_delay_list); if (r == NULL) break; fdp = acl_ring_to_appl(r, ACL_EVENT_FDTABLE, delay_entry); if ((fdp->flag & EVENT_FDTABLE_FLAG_ADD_READ)) { enable_read(ev, fdp); } if ((fdp->flag & EVENT_FDTABLE_FLAG_ADD_WRITE)) { enable_write(ev, fdp); } if ((fdp->flag & EVENT_FDTABLE_FLAG_DEL_READ)) { disable_read(ev, fdp); } if ((fdp->flag & EVENT_FDTABLE_FLAG_DEL_WRITE)) { disable_write(ev, fdp); } fdp->flag &= ~EVENT_FDTABLE_FLAG_DELAY_OPER; } for (i = 0; i < eventp->fdcnt; i++) { fdp = eventp->fdtabs[i]; if ((fdp->event_type & (ACL_EVENT_XCPT | ACL_EVENT_RW_TIMEOUT))) continue; if ((fdp->flag & EVENT_FDTABLE_FLAG_READ) && (fdp->event_read == NULL || fdp->event_read->type == 0)) { enable_read(ev, fdp); } if ((fdp->flag & EVENT_FDTABLE_FLAG_WRITE) && (fdp->event_write == NULL || fdp->event_write->type == 0)) { enable_write(ev, fdp); } } }
/* * We just call the parser to get commands from the user. We quit when * parser returns. */ int main (int argc, char **argv) { int write_priv = 0; int c; char *buf; if (!init ()) return (1); while ((c = getopt (argc, argv, "w")) != EOF) { switch (c) { case 'w': write_priv++; break; } } if (optind < argc) { buf = malloc(strlen(argv[optind]) + 32); if (!buf) { fprintf(stderr, "Couldn't allocate filename buffer\n"); exit(1); } strcpy(buf, "set_device "); strcat(buf, argv[optind]); set_device(buf); free(buf); if (write_priv) { wprintw (command_win,"\n"); enable_write("enable_write"); } } parser (); /* Get and parse user commands */ prepare_to_close(); /* Do some cleanup */ printf("Quitting ...\n"); return(0); }
int cfi_write(int unit, int addr, int size, char *buf) { struct cfi *cfi = &cfid[unit]; enable_write(cfi); cfi_send_command(cfi, CMD_PP, &addr, buf, size, 1); cfi_wait_ready(cfi); return 0; }
void cfi_erase(int unit, int addr, int size) { struct cfi *cfi = &cfid[unit]; int i, block; // Get the block number block = (addr - cfi->pagesiz) / cfi->sectsiz; if (block == 255) { for(i=0;i < 16;i++) { enable_write(cfi); cfi_send_command(cfi, CMD_P4E, &addr, NULL, 0, 1); addr += cfi->sectsiz / 16; } } else { enable_write(cfi); cfi_send_command(cfi, CMD_SE, &addr, NULL, 0, 1); } cfi_wait_ready(cfi); }
boolean UNIO::simple_write(const byte *buffer,word address,word length) { word wlen; while (length>0) { wlen=length; if (((address&0x0f)+wlen)>16) { /* Write would cross a page boundary. Truncate the write to the page boundary. */ wlen=16-(address&0x0f); } if (!enable_write()) return false; if (!start_write(buffer,address,wlen)) return false; if (!await_write_complete()) return false; buffer+=wlen; address+=wlen; length-=wlen; } return true; }
bool CNWNXTMI::OnCreate(gline *config, const char *LogDir) { char log[128]; sprintf(log, "%s/nwnx_tmi.txt", LogDir); // call the base class function if (!CNWNXBase::OnCreate(config, log)) return false; orig_TMI = FindTMILimit(); if (!orig_TMI) return false; enable_write(orig_TMI); Log(1, "found TMI limit at 0x%08x\n", orig_TMI); return true; }
static void event_set_all(ACL_EVENT *eventp) { EVENT_KERNEL *ev = (EVENT_KERNEL *) eventp; ACL_EVENT_FDTABLE *fdp; /* 优先处理添加读/写监控任务, 这样可以把 ADD 中间态转换成正式状态 */ eventp->ready_cnt = 0; if (eventp->present - eventp->last_check >= eventp->check_inter || eventp->read_ready > 0) { eventp->read_ready = 0; eventp->last_check = eventp->present; event_check_fds(eventp); } /* 处理任务项 */ while (1) { ACL_RING *r = acl_ring_pop_head(&ev->fdp_delay_list); if (r == NULL) break; fdp = acl_ring_to_appl(r, ACL_EVENT_FDTABLE, delay_entry); if ((fdp->flag & EVENT_FDTABLE_FLAG_ADD_READ)) { enable_read(ev, fdp); } if ((fdp->flag & EVENT_FDTABLE_FLAG_ADD_WRITE)) { enable_write(ev, fdp); } if ((fdp->flag & EVENT_FDTABLE_FLAG_DEL_READ)) { disable_read(ev, fdp); } if ((fdp->flag & EVENT_FDTABLE_FLAG_DEL_WRITE)) { disable_write(ev, fdp); } fdp->flag &= ~EVENT_FDTABLE_FLAG_DELAY_OPER; } }
void cfi_bulk_erase(int unit) { struct cfi *cfi = &cfid[unit]; enable_write(cfi); cfi_send_command(cfi, CMD_BLKE, NULL, NULL, 0, 1); }
static void event_set_all(ACL_EVENT *eventp) { EVENT_KERNEL *ev = (EVENT_KERNEL *) eventp; ACL_EVENT_FDTABLE *fdp; int i; /* 优先处理添加读/写监控任务, 这样可以把中间的 ADD 状态转换成正式状态 */ eventp->fdcnt_ready = 0; if (eventp->event_present - ev->last_check >= 1000000) { ev->last_check = eventp->event_present; for (i = 0; i < eventp->fdcnt; i++) { fdp = eventp->fdtabs[i]; if ((fdp->stream->flag & ACL_VSTREAM_FLAG_BAD) != 0) { fdp->stream->flag &= ~ACL_VSTREAM_FLAG_BAD; fdp->event_type |= ACL_EVENT_XCPT; fdp->fdidx_ready = eventp->fdcnt_ready; eventp->fdtabs_ready[eventp->fdcnt_ready++] = fdp; } else if ((fdp->flag & EVENT_FDTABLE_FLAG_READ)) { if (ACL_VSTREAM_BFRD_CNT(fdp->stream) > 0) { fdp->stream->sys_read_ready = 0; fdp->event_type |= ACL_EVENT_READ; fdp->fdidx_ready = eventp->fdcnt_ready; eventp->fdtabs_ready[eventp->fdcnt_ready++] = fdp; } else if (fdp->r_ttl > 0 && eventp->event_present > fdp->r_ttl) { fdp->event_type |= ACL_EVENT_RW_TIMEOUT; fdp->fdidx_ready = eventp->fdcnt_ready; eventp->fdtabs_ready[eventp->fdcnt_ready++] = fdp; } } else if ((fdp->flag & EVENT_FDTABLE_FLAG_WRITE)) { if (fdp->w_ttl > 0 && eventp->event_present > fdp->w_ttl) { fdp->event_type |= ACL_EVENT_RW_TIMEOUT; fdp->fdidx_ready = eventp->fdcnt_ready; eventp->fdtabs_ready[eventp->fdcnt_ready++] = fdp; } } } } /* 处理任务项 */ while (1) { ACL_RING *r = acl_ring_pop_head(&ev->fdp_delay_list); if (r == NULL) break; fdp = acl_ring_to_appl(r, ACL_EVENT_FDTABLE, delay_entry); if ((fdp->flag & EVENT_FDTABLE_FLAG_ADD_READ)) { enable_read(ev, fdp); } if ((fdp->flag & EVENT_FDTABLE_FLAG_ADD_WRITE)) { enable_write(ev, fdp); } if ((fdp->flag & EVENT_FDTABLE_FLAG_DEL_READ)) { disable_read(ev, fdp); } if ((fdp->flag & EVENT_FDTABLE_FLAG_DEL_WRITE)) { disable_write(ev, fdp); } fdp->flag &= ~EVENT_FDTABLE_FLAG_DELAY_OPER; } }