static int do_cpu_configure(sclp_cmdw_t cmd) { struct cpu_configure_sccb *sccb; int rc; if (!SCLP_HAS_CPU_RECONFIG) return -EOPNOTSUPP; /* * This is not going to cross a page boundary since we force * kmalloc to have a minimum alignment of 8 bytes on s390. */ sccb = kzalloc(sizeof(*sccb), GFP_KERNEL | GFP_DMA); if (!sccb) return -ENOMEM; sccb->header.length = sizeof(*sccb); rc = do_sync_request(cmd, sccb); if (rc) goto out; switch (sccb->header.response_code) { case 0x0020: case 0x0120: break; default: pr_warning("configure cpu failed (cmd=0x%08x, " "response=0x%04x)\n", cmd, sccb->header.response_code); rc = -EIO; break; } out: kfree(sccb); return rc; }
int sclp_get_cpu_info(struct sclp_cpu_info *info) { int rc; struct read_cpu_info_sccb *sccb; if (!SCLP_HAS_CPU_INFO) return -EOPNOTSUPP; sccb = (void *) get_zeroed_page(GFP_KERNEL | GFP_DMA); if (!sccb) return -ENOMEM; sccb->header.length = sizeof(*sccb); rc = do_sync_request(SCLP_CMDW_READ_CPU_INFO, sccb); if (rc) goto out; if (sccb->header.response_code != 0x0010) { pr_warning("readcpuinfo failed (response=0x%04x)\n", sccb->header.response_code); rc = -EIO; goto out; } sclp_fill_cpu_info(info, sccb); out: free_page((unsigned long) sccb); return rc; }
static int do_cpu_configure(sclp_cmdw_t cmd) { struct cpu_configure_sccb *sccb; int rc; if (!SCLP_HAS_CPU_RECONFIG) return -EOPNOTSUPP; sccb = kzalloc(sizeof(*sccb), GFP_KERNEL | GFP_DMA); if (!sccb) return -ENOMEM; sccb->header.length = sizeof(*sccb); rc = do_sync_request(cmd, sccb); if (rc) goto out; switch (sccb->header.response_code) { case 0x0020: case 0x0120: break; default: pr_warning("configure cpu failed (cmd=0x%08x, " "response=0x%04x)\n", cmd, sccb->header.response_code); rc = -EIO; break; } out: kfree(sccb); return rc; }
static int get_peer_addr(char *name, struct sockaddr_storage *peer) { struct addrinfo hint = { .ai_family = AF_UNSPEC, .ai_socktype = SOCK_STREAM, .ai_protocol = 0, .ai_flags = AI_ADDRCONFIG }; struct addrinfo *info; int err = getaddrinfo(name, NULL, &hint, &info); if (err) return err; memcpy(peer, info->ai_addr, info->ai_addrlen); freeaddrinfo(info); return 0; } /* * Function main (argc, ) * * Starts all the fun! * */ int main(int argc, char *argv[]) { struct sockaddr_storage peer; obex_object_t *object; int ret; printf("Send and receive files over TCP OBEX\n"); if ( ((argc < 3) || (argc > 3)) && (argc != 1) ) { printf ("Usage: %s [name] [peer]\n", argv[0]); return -1; } handle = OBEX_Init(OBEX_TRANS_INET, obex_event, 0); if (argc == 1) { printf("Waiting for files\n"); ret = TcpOBEX_ServerRegister(handle, NULL, 0); if(ret < 0) { printf("Cannot listen to socket\n"); exit(ret); } while (!finished) { ret = OBEX_HandleInput(handle, 10); if (ret == 0) { printf("Timeout waiting for connection\n"); break; } else if (ret < 0) { printf("Error waiting for connection\n"); break; } } } else { /* We are a client */ ret = get_peer_addr(argv[2], &peer); if (ret) { perror("Bad name"); exit(1); } ret = TcpOBEX_TransportConnect(handle, (struct sockaddr *) &peer, sizeof(peer)); if (ret < 0) { printf("Sorry, unable to connect!\n"); exit(1); } object = OBEX_ObjectNew(handle, OBEX_CMD_CONNECT); ret = do_sync_request(handle, object, 0); if( (object = build_object_from_file(handle, argv[1], 0)) ) { ret = do_sync_request(handle, object, 0); } else { perror("PUT failed"); } object = OBEX_ObjectNew(handle, OBEX_CMD_DISCONNECT); ret = do_sync_request(handle, object, 0); printf("PUT successful\n"); } return 0; }
/* * Function main (argc, ) * * Starts all the fun! * */ int main(int argc, char *argv[]) { struct sockaddr_in peer; obex_object_t *object; int ret; printf("Send and receive files over TCP OBEX\n"); if ( ((argc < 3) || (argc > 3)) && (argc != 1) ) { printf ("Usage: %s [name] [peer]\n", argv[0]); return -1; } handle = OBEX_Init(OBEX_TRANS_INET, obex_event, 0); if (argc == 1) { printf("Waiting for files\n"); ret = InOBEX_ServerRegister(handle); if(ret < 0) { printf("Cannot listen to socket\n"); exit(ret); } while (!finished) { ret = OBEX_HandleInput(handle, 10); if (ret == 0) { printf("Timeout waiting for connection\n"); break; } else if (ret < 0) { printf("Error waiting for connection\n"); break; } } } else { /* We are a client */ get_peer_addr(argv[2], &peer); ret = OBEX_TransportConnect(handle, (struct sockaddr *) &peer, sizeof(struct sockaddr_in)); if (ret < 0) { printf("Sorry, unable to connect!\n"); exit(ret); } object = OBEX_ObjectNew(handle, OBEX_CMD_CONNECT); ret = do_sync_request(handle, object, 0); if( (object = build_object_from_file(handle, argv[1], 0)) ) { ret = do_sync_request(handle, object, 0); } else { perror("PUT failed"); } object = OBEX_ObjectNew(handle, OBEX_CMD_DISCONNECT); ret = do_sync_request(handle, object, 0); printf("PUT successful\n"); } return 0; }