Пример #1
0
static void pio_tasklet(unsigned long data)
{
	struct s3cmci_host *host = (struct s3cmci_host *) data;

	disable_irq(host->irq);

	if (host->pio_active == XFER_WRITE)
		do_pio_write(host);

	if (host->pio_active == XFER_READ)
		do_pio_read(host);

	if (host->complete_what == COMPLETION_FINALIZE) {
		clear_imask(host);
		if (host->pio_active != XFER_NONE) {
			dbg(host, dbg_err, "unfinished %s "
				"- pio_count:[%u] pio_words:[%u]\n",
				(host->pio_active == XFER_READ)?"read":"write",
				host->pio_count, host->pio_words);

			host->mrq->data->error = -EIO;
//			host->mrq->data->error = MMC_ERR_DMA;
		}
		finalize_request(host);
	} else
		enable_irq(host->irq);
}
Пример #2
0
void demon_receiver(int sockfd){
    ssize_t recv_len;
    struct sockaddr_in recv_addr;
	socklen_t len=sizeof(recv_addr);
	unsigned short *msg_type;
	void *recvbuf = malloc(D2MCED_BUFF_SIZE);	//recv buf
	
	while(1) {
      	recv_len = recvfrom(sockfd, recvbuf, D2MCED_BUFF_SIZE, 0, (struct sockaddr *) &recv_addr, &len);
		msg_type = (unsigned short*)recvbuf;
		//check the require, and data length to process
		if( *msg_type == MSG_JOIN_REQ && recv_len == (sizeof(struct join_s2d_req)
			+((struct join_s2d_req*)recvbuf)->app_len+((struct join_s2d_req*)recvbuf)->group_len)) {

			join_request(recvbuf, sockfd, recv_addr);
		}
		else if(*msg_type == MSG_FINALIZE && recv_len == sizeof(struct finalize_s2d_req)) {
			finalize_request(recvbuf, sockfd, recv_addr);
		}
		else if(*msg_type == MSG_PROBE_REQ 	&& recv_len == (sizeof(struct probe_s2d_req)
				+((struct probe_s2d_req*)recvbuf)->app_len+((struct probe_s2d_req*)recvbuf)->group_len)) {	
			probe_request(recvbuf, sockfd, recv_addr);				
		}
		else if(*msg_type == MSG_NEWMAIN_MANAGER && recv_len == (sizeof(struct main_s2d_req)
			+((struct main_s2d_req*)recvbuf)->app_len+((struct main_s2d_req*)recvbuf)->group_len)) {
			new_manager_request(recvbuf, sockfd, recv_addr);
		}
		//init data
		msg_type = 0;
	}
	free(recvbuf);
    close(sockfd);
}