Lines Matching defs:bio

201 int binder_parse(struct binder_state *bs, struct binder_io *bio,
255 if (bio) {
256 bio_init_from_txn(bio, txn);
257 bio = 0;
406 void bio_init_from_txn(struct binder_io *bio, struct binder_transaction_data *txn)
408 bio->data = bio->data0 = (char *)(intptr_t)txn->data.ptr.buffer;
409 bio->offs = bio->offs0 = (binder_size_t *)(intptr_t)txn->data.ptr.offsets;
410 bio->data_avail = txn->data_size;
411 bio->offs_avail = txn->offsets_size / sizeof(size_t);
412 bio->flags = BIO_F_SHARED;
415 void bio_init(struct binder_io *bio, void *data,
421 bio->flags = BIO_F_OVERFLOW;
422 bio->data_avail = 0;
423 bio->offs_avail = 0;
427 bio->data = bio->data0 = (char *) data + n;
428 bio->offs = bio->offs0 = data;
429 bio->data_avail = maxdata - n;
430 bio->offs_avail = maxoffs;
431 bio->flags = 0;
434 static void *bio_alloc(struct binder_io *bio, size_t size)
437 if (size > bio->data_avail) {
438 bio->flags |= BIO_F_OVERFLOW;
441 void *ptr = bio->data;
442 bio->data += size;
443 bio->data_avail -= size;
465 static struct flat_binder_object *bio_alloc_obj(struct binder_io *bio)
469 obj = bio_alloc(bio, sizeof(*obj));
471 if (obj && bio->offs_avail) {
472 bio->offs_avail--;
473 *bio->offs++ = ((char*) obj) - ((char*) bio->data0);
477 bio->flags |= BIO_F_OVERFLOW;
481 void bio_put_uint32(struct binder_io *bio, uint32_t n)
483 uint32_t *ptr = bio_alloc(bio, sizeof(n));
488 void bio_put_obj(struct binder_io *bio, void *ptr)
492 obj = bio_alloc_obj(bio);
502 void bio_put_ref(struct binder_io *bio, uint32_t handle)
507 obj = bio_alloc_obj(bio);
509 obj = bio_alloc(bio, sizeof(*obj));
520 void bio_put_string16(struct binder_io *bio, const uint16_t *str)
526 bio_put_uint32(bio, 0xffffffff);
534 bio_put_uint32(bio, 0xffffffff);
539 bio_put_uint32(bio, (uint32_t) len);
541 ptr = bio_alloc(bio, len);
546 void bio_put_string16_x(struct binder_io *bio, const char *_str)
553 bio_put_uint32(bio, 0xffffffff);
560 bio_put_uint32(bio, 0xffffffff);
565 bio_put_uint32(bio, len);
566 ptr = bio_alloc(bio, (len + 1) * sizeof(uint16_t));
575 static void *bio_get(struct binder_io *bio, size_t size)
579 if (bio->data_avail < size){
580 bio->data_avail = 0;
581 bio->flags |= BIO_F_OVERFLOW;
584 void *ptr = bio->data;
585 bio->data += size;
586 bio->data_avail -= size;
591 uint32_t bio_get_uint32(struct binder_io *bio)
593 uint32_t *ptr = bio_get(bio, sizeof(*ptr));
597 uint16_t *bio_get_string16(struct binder_io *bio, size_t *sz)
602 len = (size_t) bio_get_uint32(bio);
605 return bio_get(bio, (len + 1) * sizeof(uint16_t));
608 static struct flat_binder_object *_bio_get_obj(struct binder_io *bio)
611 size_t off = bio->data - bio->data0;
614 for (n = 0; n < bio->offs_avail; n++) {
615 if (bio->offs[n] == off)
616 return bio_get(bio, sizeof(struct flat_binder_object));
619 bio->data_avail = 0;
620 bio->flags |= BIO_F_OVERFLOW;
624 uint32_t bio_get_ref(struct binder_io *bio)
628 obj = _bio_get_obj(bio);