Changeset 16639bb in mainline for uspace/lib/c/generic/bd_srv.c
- Timestamp:
- 2012-08-15T22:13:37Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 83298e8
- Parents:
- f7ea5400 (diff), c5a6076 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/bd_srv.c
rf7ea5400 r16639bb 67 67 } 68 68 69 if (srv-> ops->read_blocks == NULL) {69 if (srv->srvs->ops->read_blocks == NULL) { 70 70 async_answer_0(rcallid, ENOTSUP); 71 71 async_answer_0(callid, ENOTSUP); … … 73 73 } 74 74 75 rc = srv-> ops->read_blocks(srv, ba, cnt, buf, size);75 rc = srv->srvs->ops->read_blocks(srv, ba, cnt, buf, size); 76 76 if (rc != EOK) { 77 77 async_answer_0(rcallid, ENOMEM); … … 109 109 } 110 110 111 if (srv-> ops->read_toc == NULL) {111 if (srv->srvs->ops->read_toc == NULL) { 112 112 async_answer_0(rcallid, ENOTSUP); 113 113 async_answer_0(callid, ENOTSUP); … … 115 115 } 116 116 117 rc = srv-> ops->read_toc(srv, session, buf, size);117 rc = srv->srvs->ops->read_toc(srv, session, buf, size); 118 118 if (rc != EOK) { 119 119 async_answer_0(rcallid, ENOMEM); … … 146 146 } 147 147 148 if (srv-> ops->write_blocks == NULL) {149 async_answer_0(callid, ENOTSUP); 150 return; 151 } 152 153 rc = srv-> ops->write_blocks(srv, ba, cnt, data, size);148 if (srv->srvs->ops->write_blocks == NULL) { 149 async_answer_0(callid, ENOTSUP); 150 return; 151 } 152 153 rc = srv->srvs->ops->write_blocks(srv, ba, cnt, data, size); 154 154 free(data); 155 155 async_answer_0(callid, rc); … … 162 162 size_t block_size; 163 163 164 if (srv-> ops->get_block_size == NULL) {165 async_answer_0(callid, ENOTSUP); 166 return; 167 } 168 169 rc = srv-> ops->get_block_size(srv, &block_size);164 if (srv->srvs->ops->get_block_size == NULL) { 165 async_answer_0(callid, ENOTSUP); 166 return; 167 } 168 169 rc = srv->srvs->ops->get_block_size(srv, &block_size); 170 170 async_answer_1(callid, rc, block_size); 171 171 } … … 177 177 aoff64_t num_blocks; 178 178 179 if (srv-> ops->get_num_blocks == NULL) {180 async_answer_0(callid, ENOTSUP); 181 return; 182 } 183 184 rc = srv-> ops->get_num_blocks(srv, &num_blocks);179 if (srv->srvs->ops->get_num_blocks == NULL) { 180 async_answer_0(callid, ENOTSUP); 181 return; 182 } 183 184 rc = srv->srvs->ops->get_num_blocks(srv, &num_blocks); 185 185 async_answer_2(callid, rc, LOWER32(num_blocks), UPPER32(num_blocks)); 186 186 } 187 187 188 void bd_srv_init(bd_srv_t *srv) 189 { 190 fibril_mutex_initialize(&srv->lock); 191 srv->connected = false; 192 srv->ops = NULL; 193 srv->arg = NULL; 194 srv->client_sess = NULL; 195 } 196 197 int bd_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg) 198 { 199 bd_srv_t *srv = (bd_srv_t *)arg; 200 int rc; 201 202 fibril_mutex_lock(&srv->lock); 203 if (srv->connected) { 204 fibril_mutex_unlock(&srv->lock); 205 async_answer_0(iid, EBUSY); 206 return EBUSY; 207 } 208 209 srv->connected = true; 210 fibril_mutex_unlock(&srv->lock); 188 static bd_srv_t *bd_srv_create(bd_srvs_t *srvs) 189 { 190 bd_srv_t *srv; 191 192 srv = calloc(1, sizeof(srv)); 193 if (srv == NULL) 194 return NULL; 195 196 srv->srvs = srvs; 197 return srv; 198 } 199 200 void bd_srvs_init(bd_srvs_t *srvs) 201 { 202 srvs->ops = NULL; 203 srvs->sarg = NULL; 204 } 205 206 int bd_conn(ipc_callid_t iid, ipc_call_t *icall, bd_srvs_t *srvs) 207 { 208 bd_srv_t *srv; 209 int rc; 211 210 212 211 /* Accept the connection */ 213 212 async_answer_0(iid, EOK); 213 214 srv = bd_srv_create(srvs); 215 if (srv == NULL) 216 return ENOMEM; 214 217 215 218 async_sess_t *sess = async_callback_receive(EXCHANGE_SERIALIZE); … … 219 222 srv->client_sess = sess; 220 223 221 rc = srv ->ops->open(srv);224 rc = srvs->ops->open(srvs, srv); 222 225 if (rc != EOK) 223 226 return rc; … … 230 233 if (!method) { 231 234 /* The other side has hung up */ 232 fibril_mutex_lock(&srv->lock);233 srv->connected = false;234 fibril_mutex_unlock(&srv->lock);235 235 async_answer_0(callid, EOK); 236 236 break; … … 258 258 } 259 259 260 return srv->ops->close(srv); 260 rc = srvs->ops->close(srv); 261 free(srv); 262 263 return rc; 261 264 } 262 265
Note:
See TracChangeset
for help on using the changeset viewer.