Lines Matching refs:ctx

75 	atom_context *ctx;
87 status_t atom_execute_table_locked(atom_context *ctx,
89 status_t atom_execute_table(atom_context *ctx, int index, uint32 *params);
110 atom_iio_execute(atom_context *ctx, int base, uint32 index, uint32 data)
119 temp = ctx->card->ioreg_read(CU16(base + 1));
123 (void)ctx->card->reg_read(CU16(base + 1));
124 ctx->card->ioreg_write(CU16(base + 1), temp);
149 temp |= ((ctx->io_attr >> CU8(base + 2))
163 atom_get_src_int(atom_exec_context *ctx, uint8 attr, int *ptr,
167 atom_context *gctx = ctx->ctx;
203 val = B_LENDIAN_TO_HOST_INT32(ctx->ps[idx]);
204 // TODO : val = get_unaligned_le32((u32 *)&ctx->ps[idx]);
238 val = ctx->ws[idx];
299 atom_skip_src_int(atom_exec_context *ctx, uint8 attr, int *ptr)
337 atom_get_src(atom_exec_context *ctx, uint8 attr, int *ptr)
339 return atom_get_src_int(ctx, attr, ptr, NULL, 1);
344 atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *ptr)
372 atom_get_dst(atom_exec_context *ctx, int arg, uint8 attr,
375 return atom_get_src_int(ctx,
381 atom_skip_dst(atom_exec_context *ctx, int arg, uint8 attr, int *ptr)
383 atom_skip_src_int(ctx,
389 atom_put_dst(atom_exec_context *ctx, int arg, uint8 attr,
394 atom_context *gctx = ctx->ctx;
437 ctx->ps[idx] = B_HOST_TO_LENDIAN_INT32(val);
468 ctx->ws[idx] = val;
496 atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
501 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
502 src = atom_get_src(ctx, attr, ptr);
508 atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
513 atom_op_and(atom_exec_context *ctx, int *ptr, int arg)
518 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
519 src = atom_get_src(ctx, attr, ptr);
525 atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
530 atom_op_beep(atom_exec_context *ctx, int *ptr, int arg)
537 atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
548 if (U16(ctx->ctx->cmd_table + 4 + 2 * idx)) {
549 result = atom_execute_table_locked(ctx->ctx,
550 idx, ctx->ps + ctx->ps_shift);
554 ctx->abort = true;
559 atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
566 atom_get_dst(ctx, arg, attr, ptr, &saved, 0);
568 atom_put_dst(ctx, arg, attr, &dptr, 0, saved);
573 atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
577 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
578 src = atom_get_src(ctx, attr, ptr);
579 ctx->ctx->cs_equal = (dst == src);
580 ctx->ctx->cs_above = (dst > src);
582 dst, ctx->ctx->cs_above ? ">" : "<=", src);
587 atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
603 atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
607 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
608 src = atom_get_src(ctx, attr, ptr);
610 ctx->ctx->divmul[0] = dst / src;
611 ctx->ctx->divmul[1] = dst%src;
613 ctx->ctx->divmul[0] = 0;
614 ctx->ctx->divmul[1] = 0;
619 ctx->ctx->divmul[0], ctx->ctx->divmul[1]);
625 atom_op_div32(atom_exec_context *ctx, int *ptr, int arg)
630 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
631 src = atom_get_src(ctx, attr, ptr);
634 val64 |= ((uint64)ctx->ctx->divmul[1]) << 32;
637 ctx->ctx->divmul[0] = (uint32)val64;
639 ctx->ctx->divmul[1] = (uint32)(((val64) >> 16) >> 16);
641 ctx->ctx->divmul[0] = 0;
642 ctx->ctx->divmul[1] = 0;
647 ctx->ctx->divmul[0], ctx->ctx->divmul[1]);
653 atom_op_eot(atom_exec_context *ctx, int *ptr, int arg)
660 atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
666 execute = ctx->ctx->cs_above;
669 execute = ctx->ctx->cs_above || ctx->ctx->cs_equal;
675 execute = !(ctx->ctx->cs_above || ctx->ctx->cs_equal);
678 execute = !ctx->ctx->cs_above;
681 execute = ctx->ctx->cs_equal;
684 execute = !ctx->ctx->cs_equal;
692 if (ctx->lastJump == (ctx->start + target)) {
693 bigtime_t loopDuration = system_time() - ctx->jumpStart;
697 ATOM_OP_JMP_TIMEOUT, ctx->lastJumpCount);
698 ctx->abort = true;
700 ctx->lastJumpCount++;
702 ctx->jumpStart = system_time();
703 ctx->lastJump = ctx->start + target;
704 ctx->lastJumpCount = 1;
706 *ptr = ctx->start + target;
712 atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
717 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
718 mask = atom_get_src_direct(ctx, ((attr >> 3) & 7), ptr);
719 src = atom_get_src(ctx, attr, ptr);
724 atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
729 atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
735 atom_get_dst(ctx, arg, attr, ptr, &saved, 0);
737 atom_skip_dst(ctx, arg, attr, ptr);
740 src = atom_get_src(ctx, attr, ptr);
743 atom_put_dst(ctx, arg, attr, &dptr, src, saved);
748 atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
752 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
753 src = atom_get_src(ctx, attr, ptr);
754 ctx->ctx->divmul[0] = dst * src;
756 __func__, dst, src, ctx->ctx->divmul[0]);
761 atom_op_mul32(atom_exec_context *ctx, int *ptr, int arg)
766 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
767 src = atom_get_src(ctx, attr, ptr);
770 ctx->ctx->divmul[0] = (uint32)val64;
772 ctx->ctx->divmul[1] = (uint32)(((val64) >> 16) >> 16);
776 ctx->ctx->divmul[0], ctx->ctx->divmul[1]);
782 atom_op_nop(atom_exec_context *ctx, int *ptr, int arg)
789 atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
794 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
795 src = atom_get_src(ctx, attr, ptr);
801 atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
806 atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg)
815 static void atom_op_repeat(atom_exec_context *ctx, int *ptr, int arg)
822 atom_op_restorereg(atom_exec_context *ctx, int *ptr, int arg)
829 atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg)
836 atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
842 ctx->ctx->data_block = 0;
844 ctx->ctx->data_block = ctx->start;
846 ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx);
851 atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg)
854 ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr);
855 TRACE("%s: fb_base: 0x%" B_PRIX32 "\n", __func__, ctx->ctx->fb_base);
860 atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
872 ctx->ctx->io_mode = ATOM_IO_MM;
874 ctx->ctx->io_mode = ATOM_IO_IIO | port;
878 ctx->ctx->io_mode = ATOM_IO_PCI;
882 ctx->ctx->io_mode = ATOM_IO_SYSIO;
890 atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)
892 ctx->ctx->reg_block = U16(*ptr);
897 static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
904 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
905 shift = atom_get_src_direct(ctx, ATOM_SRC_BYTE0, ptr);
911 atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
915 static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
922 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
923 shift = atom_get_src_direct(ctx, ATOM_SRC_BYTE0, ptr);
929 atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
933 static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
939 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
942 shift = atom_get_src(ctx, attr, ptr);
950 atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
954 static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
960 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
963 shift = atom_get_src(ctx, attr, ptr);
971 atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
976 atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
981 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
982 src = atom_get_src(ctx, attr, ptr);
988 atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
993 atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
998 src = atom_get_src(ctx, attr, ptr);
1003 val = atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM, ptr);
1006 *ptr = ctx->start + target;
1019 atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
1023 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
1024 src = atom_get_src(ctx, attr, ptr);
1026 ctx->ctx->cs_equal = ((dst & src) == 0);
1028 dst, src, ctx->ctx->cs_equal ? "NE" : "EQ");
1033 atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
1038 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
1039 src = atom_get_src(ctx, attr, ptr);
1045 atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
1050 atom_op_debug(atom_exec_context *ctx, int *ptr, int arg)
1060 atom_op_processds(atom_exec_context *ctx, int *ptr, int arg)
1203 atom_execute_table_locked(atom_context *ctx, int index, uint32 * params)
1205 int base = CU16(ctx->cmd_table + 4 + 2 * index);
1220 ectx.ctx = ctx;
1269 atom_execute_table(atom_context *ctx, int index, uint32 *params)
1271 if (acquire_sem_etc(ctx->exec_sem, 1, B_RELATIVE_TIMEOUT, 5000000)
1277 ctx->data_block = 0;
1279 ctx->reg_block = 0;
1281 ctx->fb_base = 0;
1283 ctx->io_mode = ATOM_IO_MM;
1285 ctx->divmul[0] = 0;
1286 ctx->divmul[1] = 0;
1287 status_t result = atom_execute_table_locked(ctx, index, params);
1299 release_sem(ctx->exec_sem);
1308 atom_index_iio(atom_context *ctx, int base)
1310 ctx->iio = (uint16*)malloc(2 * 256);
1312 ctx->iio[CU8(base + 1)] = base + 2;
1324 atom_context *ctx = (atom_context*)malloc(sizeof(atom_context));
1326 if (ctx == NULL) {
1331 ctx->card = card;
1332 ctx->bios = bios;
1336 free(ctx);
1342 free(ctx);
1350 free(ctx);
1354 ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR);
1355 ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR);
1356 atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
1375 return ctx;
1380 atom_asic_init(atom_context *ctx)
1382 int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
1391 if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
1394 return atom_execute_table(ctx, ATOM_CMD_INIT, ps);
1399 atom_destroy(atom_context *ctx)
1401 if (ctx != NULL) {
1402 free(ctx->iio);
1403 free(ctx->scratch);
1404 delete_sem(ctx->exec_sem);
1407 free(ctx);
1412 atom_parse_data_header(atom_context *ctx, int index, uint16 *size,
1416 int idx = CU16(ctx->data_table + offset);
1417 uint16 *mdt = (uint16*)(ctx->bios + ctx->data_table + 4);
1434 atom_parse_cmd_header(atom_context *ctx, int index, uint8 * frev,
1438 int idx = CU16(ctx->cmd_table + offset);
1439 uint16 *mct = (uint16*)(ctx->bios + ctx->cmd_table + 4);
1453 atom_allocate_fb_scratch(atom_context *ctx)
1460 if (atom_parse_data_header(ctx, index, NULL, NULL, NULL, &data_offset)
1462 firmware = (_ATOM_VRAM_USAGE_BY_FIRMWARE *)(ctx->bios + data_offset);
1474 ctx->scratch_size_bytes = 0;
1478 ctx->scratch = (uint32*)malloc(usage_bytes);
1479 if (!ctx->scratch)
1482 ctx->scratch_size_bytes = usage_bytes;