Changeset afcf704 in mainline for uspace/lib/ipcgfx/src/server.c
- Timestamp:
- 2020-06-14T22:23:34Z (4 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c45d8696
- Parents:
- 28f8f6f2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ipcgfx/src/server.c
r28f8f6f2 rafcf704 128 128 /* Check size */ 129 129 if (size != PAGES2SIZE(SIZE2PAGES(dim.x * dim.y * sizeof(uint32_t)))) { 130 printf("size=%zu, expected=%zu\n", size, dim.x * dim.y * sizeof(uint32_t));131 130 async_answer_0(icall, EINVAL); 132 131 return; … … 168 167 } 169 168 169 static void gc_bitmap_create_doutput_srv(ipc_gc_srv_t *srvgc, ipc_call_t *icall) 170 { 171 gfx_bitmap_params_t params; 172 gfx_bitmap_alloc_t alloc; 173 gfx_bitmap_t *bitmap; 174 gfx_coord2_t dim; 175 ipc_gc_srv_bitmap_t *srvbmp = NULL; 176 ipc_call_t call; 177 size_t size; 178 errno_t rc; 179 180 if (!async_data_write_receive(&call, &size)) { 181 async_answer_0(&call, EREFUSED); 182 async_answer_0(icall, EREFUSED); 183 return; 184 } 185 186 if (size != sizeof(gfx_bitmap_params_t)) { 187 async_answer_0(&call, EINVAL); 188 async_answer_0(icall, EINVAL); 189 return; 190 } 191 192 rc = async_data_write_finalize(&call, ¶ms, size); 193 if (rc != EOK) { 194 async_answer_0(&call, rc); 195 async_answer_0(icall, rc); 196 return; 197 } 198 199 /* Bitmap dimensions */ 200 gfx_coord2_subtract(¶ms.rect.p1, ¶ms.rect.p0, &dim); 201 202 if (!async_share_in_receive(&call, &size)) { 203 async_answer_0(icall, EINVAL); 204 return; 205 } 206 207 /* Check size */ 208 if (size != PAGES2SIZE(SIZE2PAGES(dim.x * dim.y * sizeof(uint32_t)))) { 209 async_answer_0(&call, EINVAL); 210 async_answer_0(icall, EINVAL); 211 return; 212 } 213 214 rc = gfx_bitmap_create(srvgc->gc, ¶ms, NULL, &bitmap); 215 if (rc != EOK) { 216 async_answer_0(&call, rc); 217 async_answer_0(icall, rc); 218 return; 219 } 220 221 rc = gfx_bitmap_get_alloc(bitmap, &alloc); 222 if (rc != EOK) { 223 gfx_bitmap_destroy(bitmap); 224 async_answer_0(&call, rc); 225 async_answer_0(icall, rc); 226 return; 227 } 228 229 rc = async_share_in_finalize(&call, alloc.pixels, AS_AREA_READ | 230 AS_AREA_WRITE | AS_AREA_CACHEABLE); 231 if (rc != EOK) { 232 gfx_bitmap_destroy(bitmap); 233 async_answer_0(icall, EIO); 234 return; 235 } 236 237 srvbmp = calloc(1, sizeof(ipc_gc_srv_bitmap_t)); 238 if (srvbmp == NULL) { 239 gfx_bitmap_destroy(bitmap); 240 async_answer_0(icall, ENOMEM); 241 return; 242 } 243 244 srvbmp->srvgc = srvgc; 245 list_append(&srvbmp->lbitmaps, &srvgc->bitmaps); 246 srvbmp->bmp = bitmap; 247 srvbmp->bmp_id = srvgc->next_bmp_id++; 248 printf("gc_bitmap_create_doutput_srv: storing bmp_id=%u\n", 249 (unsigned) srvbmp->bmp_id); 250 251 async_answer_1(icall, EOK, srvbmp->bmp_id); 252 } 253 170 254 static void gc_bitmap_destroy_srv(ipc_gc_srv_t *srvgc, ipc_call_t *call) 171 255 { … … 270 354 gc_bitmap_create_srv(&srvgc, &call); 271 355 break; 356 case GC_BITMAP_CREATE_DOUTPUT: 357 gc_bitmap_create_doutput_srv(&srvgc, &call); 358 break; 272 359 case GC_BITMAP_DESTROY: 273 360 gc_bitmap_destroy_srv(&srvgc, &call);
Note:
See TracChangeset
for help on using the changeset viewer.