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