Exemple #1
0
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);
		}
	}
}
Exemple #2
0
/*
 * 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);
}
Exemple #3
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; 
}
Exemple #4
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); 
}
Exemple #5
0
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;
}
Exemple #6
0
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;
}
Exemple #7
0
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;
	}
}
Exemple #8
0
void cfi_bulk_erase(int unit) {
    struct cfi *cfi = &cfid[unit];

    enable_write(cfi);
    cfi_send_command(cfi, CMD_BLKE, NULL, NULL, 0, 1);
}
Exemple #9
0
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;
	}
}