@@ -112,62 +112,62 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
uint32_t temp = 0xCDCDCDCD;
while (1)
- switch (CU8(base)) {
+ switch (get_u8(ctx->bios, base)) {
case ATOM_IIO_NOP:
base++;
break;
case ATOM_IIO_READ:
- temp = ctx->card->reg_read(ctx->card, CU16(base + 1));
+ temp = ctx->card->reg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
base += 3;
break;
case ATOM_IIO_WRITE:
- ctx->card->reg_write(ctx->card, CU16(base + 1), temp);
+ ctx->card->reg_write(ctx->card,
+ get_u16(ctx->bios, base + 1),
+ temp);
base += 3;
break;
case ATOM_IIO_CLEAR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 2));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 2));
base += 3;
break;
case ATOM_IIO_SET:
temp |=
- (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base +
- 2);
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->bios,
+ base + 2);
base += 3;
break;
case ATOM_IIO_MOVE_INDEX:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((index >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((index >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_DATA:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((data >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((data >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_ATTR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
((ctx->
- io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 -
- CU8
- (base
- +
- 1))))
- << CU8(base + 3);
+ io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 -
+ get_u8(ctx->bios, base + 1))))
+ << get_u8(ctx->bios, base + 3);
base += 4;
break;
case ATOM_IIO_END:
@@ -187,7 +187,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
align = (attr >> 3) & 7;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("REG[0x%04X]", idx);
@@ -219,7 +219,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
/* get_unaligned_le32 avoids unaligned accesses from atombios
* tables, noticed on a DEC Alpha. */
@@ -228,7 +228,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
DEBUG("PS[0x%02X,0x%04X]", idx, val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("WS[0x%02X]", idx);
@@ -265,7 +265,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_ID:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print) {
if (gctx->data_block)
@@ -273,10 +273,10 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
else
DEBUG("ID[0x%04X]", idx);
}
- val = U32(idx + gctx->data_block);
+ val = get_u32(ctx->ctx->bios, idx + gctx->data_block);
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n",
@@ -290,7 +290,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_ARG_IMM:
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
if (print)
DEBUG("IMM 0x%08X\n", val);
@@ -298,7 +298,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("IMM 0x%04X\n", val);
@@ -307,7 +307,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("IMM 0x%02X\n", val);
@@ -315,14 +315,14 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
return 0;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("PLL[0x%02X]", idx);
val = gctx->card->pll_read(gctx->card, idx);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("MC[0x%02X]", idx);
@@ -410,20 +410,20 @@ static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
break;
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
break;
case ATOM_SRC_BYTE0:
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
break;
}
@@ -460,7 +460,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
val |= saved;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
DEBUG("REG[0x%04X]", idx);
idx += gctx->reg_block;
@@ -493,13 +493,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PS[0x%02X]", idx);
ctx->ps[idx] = cpu_to_le32(val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("WS[0x%02X]", idx);
switch (idx) {
@@ -532,7 +532,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n",
@@ -542,13 +542,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
DEBUG("FB[0x%02X]", idx);
break;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PLL[0x%02X]", idx);
gctx->card->pll_write(gctx->card, idx, val);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("MC[0x%02X]", idx);
gctx->card->mc_write(gctx->card, idx, val);
@@ -584,7 +584,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -598,7 +598,7 @@ static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -617,14 +617,14 @@ static void atom_op_beep(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8((*ptr)++);
+ int idx = get_u8(ctx->ctx->bios, (*ptr)++);
int r = 0;
if (idx < ATOM_TABLE_NAMES_CNT)
SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]);
else
SDEBUG(" table: %d\n", idx);
- if (U16(ctx->ctx->cmd_table + 4 + 2 * idx))
+ if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx))
r = amdgpu_atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift);
if (r) {
ctx->abort = true;
@@ -633,7 +633,7 @@ static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t saved;
int dptr = *ptr;
attr &= 0x38;
@@ -645,7 +645,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -659,7 +659,7 @@ static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
{
- unsigned count = U8((*ptr)++);
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" count: %d\n", count);
if (arg == ATOM_UNIT_MICROSEC)
udelay(count);
@@ -671,7 +671,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -689,7 +689,7 @@ static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div32(atom_exec_context *ctx, int *ptr, int arg)
{
uint64_t val64;
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -714,7 +714,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
{
- int execute = 0, target = U16(*ptr);
+ int execute = 0, target = get_u16(ctx->ctx->bios, *ptr);
unsigned long cjiffies;
(*ptr) += 2;
@@ -768,7 +768,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, mask, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -785,7 +785,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, saved;
int dptr = *ptr;
if (((attr >> 3) & 7) != ATOM_SRC_DWORD)
@@ -802,7 +802,7 @@ static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -814,7 +814,7 @@ static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul32(atom_exec_context *ctx, int *ptr, int arg)
{
uint64_t val64;
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -832,7 +832,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -846,7 +846,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("POST card output: 0x%02X\n", val);
}
@@ -867,7 +867,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8(*ptr);
+ int idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
SDEBUG(" block: %d\n", idx);
if (!idx)
@@ -875,13 +875,14 @@ static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
else if (idx == 255)
ctx->ctx->data_block = ctx->start;
else
- ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx);
+ ctx->ctx->data_block = get_u16(ctx->ctx->bios,
+ ctx->ctx->data_table + 4 + 2 * idx);
SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block);
}
static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" fb_base: ");
ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr);
}
@@ -891,7 +892,7 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
int port;
switch (arg) {
case ATOM_PORT_ATI:
- port = U16(*ptr);
+ port = get_u16(ctx->ctx->bios, *ptr);
if (port < ATOM_IO_NAMES_CNT)
SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]);
else
@@ -915,14 +916,14 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)
{
- ctx->ctx->reg_block = U16(*ptr);
+ ctx->ctx->reg_block = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block);
}
static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -938,7 +939,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -954,7 +955,7 @@ static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -973,7 +974,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -992,7 +993,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1006,18 +1007,18 @@ static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, val, target;
SDEBUG(" switch: ");
src = atom_get_src(ctx, attr, ptr);
- while (U16(*ptr) != ATOM_CASE_END)
- if (U8(*ptr) == ATOM_CASE_MAGIC) {
+ while (get_u16(ctx->ctx->bios, *ptr) != ATOM_CASE_END)
+ if (get_u8(ctx->ctx->bios, *ptr) == ATOM_CASE_MAGIC) {
(*ptr)++;
SDEBUG(" case: ");
val =
atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM,
ptr);
- target = U16(*ptr);
+ target = get_u16(ctx->ctx->bios, *ptr);
if (val == src) {
SDEBUG(" target: %04X\n", target);
*ptr = ctx->start + target;
@@ -1033,7 +1034,7 @@ static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -1045,7 +1046,7 @@ static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1059,13 +1060,13 @@ static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_debug(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("DEBUG output: 0x%02X\n", val);
}
static void atom_op_processds(atom_exec_context *ctx, int *ptr, int arg)
{
- uint16_t val = U16(*ptr);
+ uint16_t val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += val + 2;
SDEBUG("PROCESSDS output: 0x%02X\n", val);
}
@@ -1206,7 +1207,7 @@ static struct {
static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t *params)
{
- int base = CU16(ctx->cmd_table + 4 + 2 * index);
+ int base = get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index);
int len, ws, ps, ptr;
unsigned char op;
atom_exec_context ectx;
@@ -1215,9 +1216,9 @@ static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index,
if (!base)
return -EINVAL;
- len = CU16(base + ATOM_CT_SIZE_PTR);
- ws = CU8(base + ATOM_CT_WS_PTR);
- ps = CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
+ len = get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR);
+ ws = get_u8(ctx->bios, base + ATOM_CT_WS_PTR);
+ ps = get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
ptr = base + ATOM_CT_CODE_PTR;
SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps);
@@ -1235,7 +1236,7 @@ static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index,
debug_depth++;
while (1) {
- op = CU8(ptr++);
+ op = get_u8(ctx->bios, ptr++);
if (op < ATOM_OP_NAMES_CNT)
SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1);
else
@@ -1293,11 +1294,11 @@ static void atom_index_iio(struct atom_context *ctx, int base)
ctx->iio = kzalloc(2 * 256, GFP_KERNEL);
if (!ctx->iio)
return;
- while (CU8(base) == ATOM_IIO_START) {
- ctx->iio[CU8(base + 1)] = base + 2;
+ while (get_u8(ctx->bios, base) == ATOM_IIO_START) {
+ ctx->iio[get_u8(ctx->bios, base + 1)] = base + 2;
base += 2;
- while (CU8(base) != ATOM_IIO_END)
- base += atom_iio_len[CU8(base)];
+ while (get_u8(ctx->bios, base) != ATOM_IIO_END)
+ base += atom_iio_len[get_u8(ctx->bios, base)];
base += 3;
}
}
@@ -1472,7 +1473,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
ctx->card = card;
ctx->bios = bios;
- if (CU16(0) != ATOM_BIOS_MAGIC) {
+ if (get_u16(ctx->bios, 0) != ATOM_BIOS_MAGIC) {
pr_info("Invalid BIOS magic\n");
kfree(ctx);
return NULL;
@@ -1485,7 +1486,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
return NULL;
}
- base = CU16(ATOM_ROM_TABLE_PTR);
+ base = get_u16(ctx->bios, ATOM_ROM_TABLE_PTR);
if (strncmp
(CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC,
strlen(ATOM_ROM_MAGIC))) {
@@ -1494,15 +1495,16 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
return NULL;
}
- ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR);
- ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR);
- atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
+ ctx->cmd_table = get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR);
+ ctx->data_table = get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR);
+ atom_index_iio(ctx,
+ get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
if (!ctx->iio) {
amdgpu_atom_destroy(ctx);
return NULL;
}
- idx = CU16(ATOM_ROM_PART_NUMBER_PTR);
+ idx = get_u16(ctx->bios, ATOM_ROM_PART_NUMBER_PTR);
if (idx == 0)
idx = 0x80;
@@ -1533,18 +1535,18 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
int amdgpu_atom_asic_init(struct atom_context *ctx)
{
- int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
+ int hwi = get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR);
uint32_t ps[16];
int ret;
memset(ps, 0, 64);
- ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
- ps[1] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR));
+ ps[0] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR));
+ ps[1] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR));
if (!ps[0] || !ps[1])
return 1;
- if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
+ if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
return 1;
ret = amdgpu_atom_execute_table(ctx, ATOM_CMD_INIT, ps);
if (ret)
@@ -1566,18 +1568,18 @@ bool amdgpu_atom_parse_data_header(struct atom_context *ctx, int index,
uint16_t *data_start)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->data_table + offset);
+ int idx = get_u16(ctx->bios, ctx->data_table + offset);
u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4);
if (!mdt[index])
return false;
if (size)
- *size = CU16(idx);
+ *size = get_u16(ctx->bios, idx);
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
*data_start = idx;
return true;
}
@@ -1586,16 +1588,16 @@ bool amdgpu_atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t *
uint8_t *crev)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->cmd_table + offset);
+ int idx = get_u16(ctx->bios, ctx->cmd_table + offset);
u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4);
if (!mct[index])
return false;
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
return true;
}
@@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr)
{
return ((unsigned char *)bios)[ptr];
}
-#define U8(ptr) get_u8(ctx->ctx->bios, (ptr))
-#define CU8(ptr) get_u8(ctx->bios, (ptr))
+
static inline uint16_t get_u16(void *bios, int ptr)
{
return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8);
}
-#define U16(ptr) get_u16(ctx->ctx->bios, (ptr))
-#define CU16(ptr) get_u16(ctx->bios, (ptr))
+
static inline uint32_t get_u32(void *bios, int ptr)
{
return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16);
}
-#define U32(ptr) get_u32(ctx->ctx->bios, (ptr))
-#define CU32(ptr) get_u32(ctx->bios, (ptr))
+
#define CSTR(ptr) (((char *)(ctx->bios))+(ptr))
#endif
@@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr)
{
return ((unsigned char *)bios)[ptr];
}
-#define U8(ptr) get_u8(ctx->ctx->bios, (ptr))
-#define CU8(ptr) get_u8(ctx->bios, (ptr))
+
static inline uint16_t get_u16(void *bios, int ptr)
{
return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8);
}
-#define U16(ptr) get_u16(ctx->ctx->bios, (ptr))
-#define CU16(ptr) get_u16(ctx->bios, (ptr))
+
static inline uint32_t get_u32(void *bios, int ptr)
{
return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16);
}
-#define U32(ptr) get_u32(ctx->ctx->bios, (ptr))
-#define CU32(ptr) get_u32(ctx->bios, (ptr))
+
#define CSTR(ptr) (((char *)(ctx->bios))+(ptr))
#endif
@@ -112,64 +112,65 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
uint32_t temp = 0xCDCDCDCD;
while (1)
- switch (CU8(base)) {
+ switch (get_u8(ctx->bios, base)) {
case ATOM_IIO_NOP:
base++;
break;
case ATOM_IIO_READ:
- temp = ctx->card->ioreg_read(ctx->card, CU16(base + 1));
+ temp = ctx->card->ioreg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
base += 3;
break;
case ATOM_IIO_WRITE:
if (rdev->family == CHIP_RV515)
- (void)ctx->card->ioreg_read(ctx->card, CU16(base + 1));
- ctx->card->ioreg_write(ctx->card, CU16(base + 1), temp);
+ (void)ctx->card->ioreg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
+ ctx->card->ioreg_write(ctx->card,
+ get_u16(ctx->bios, base + 1),
+ temp);
base += 3;
break;
case ATOM_IIO_CLEAR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 2));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 2));
base += 3;
break;
case ATOM_IIO_SET:
temp |=
- (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base +
- 2);
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->bios,
+ base + 2);
base += 3;
break;
case ATOM_IIO_MOVE_INDEX:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((index >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((index >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_DATA:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((data >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((data >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_ATTR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
((ctx->
- io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 -
- CU8
- (base
- +
- 1))))
- << CU8(base + 3);
+ io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 -
+ get_u8(ctx->bios, base + 1))))
+ << get_u8(ctx->bios, base + 3);
base += 4;
break;
case ATOM_IIO_END:
@@ -189,7 +190,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
align = (attr >> 3) & 7;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("REG[0x%04X]", idx);
@@ -221,7 +222,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
/* get_unaligned_le32 avoids unaligned accesses from atombios
* tables, noticed on a DEC Alpha. */
@@ -230,7 +231,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
DEBUG("PS[0x%02X,0x%04X]", idx, val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("WS[0x%02X]", idx);
@@ -267,7 +268,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_ID:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print) {
if (gctx->data_block)
@@ -275,10 +276,10 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
else
DEBUG("ID[0x%04X]", idx);
}
- val = U32(idx + gctx->data_block);
+ val = get_u32(ctx->ctx->bios, idx + gctx->data_block);
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n",
@@ -292,7 +293,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_ARG_IMM:
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
if (print)
DEBUG("IMM 0x%08X\n", val);
@@ -300,7 +301,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("IMM 0x%04X\n", val);
@@ -309,7 +310,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("IMM 0x%02X\n", val);
@@ -317,14 +318,14 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
return 0;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("PLL[0x%02X]", idx);
val = gctx->card->pll_read(gctx->card, idx);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("MC[0x%02X]", idx);
@@ -412,20 +413,20 @@ static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
break;
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
break;
case ATOM_SRC_BYTE0:
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
break;
}
@@ -462,7 +463,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
val |= saved;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
DEBUG("REG[0x%04X]", idx);
idx += gctx->reg_block;
@@ -495,13 +496,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PS[0x%02X]", idx);
ctx->ps[idx] = cpu_to_le32(val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("WS[0x%02X]", idx);
switch (idx) {
@@ -534,7 +535,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n",
@@ -544,13 +545,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
DEBUG("FB[0x%02X]", idx);
break;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PLL[0x%02X]", idx);
gctx->card->pll_write(gctx->card, idx, val);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("MC[0x%02X]", idx);
gctx->card->mc_write(gctx->card, idx, val);
@@ -586,7 +587,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -600,7 +601,7 @@ static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -619,14 +620,14 @@ static void atom_op_beep(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8((*ptr)++);
+ int idx = get_u8(ctx->ctx->bios, (*ptr)++);
int r = 0;
if (idx < ATOM_TABLE_NAMES_CNT)
SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]);
else
SDEBUG(" table: %d\n", idx);
- if (U16(ctx->ctx->cmd_table + 4 + 2 * idx))
+ if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx))
r = atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift);
if (r) {
ctx->abort = true;
@@ -635,7 +636,7 @@ static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t saved;
int dptr = *ptr;
attr &= 0x38;
@@ -647,7 +648,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -661,7 +662,7 @@ static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
{
- unsigned count = U8((*ptr)++);
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" count: %d\n", count);
if (arg == ATOM_UNIT_MICROSEC)
udelay(count);
@@ -673,7 +674,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -695,7 +696,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
{
- int execute = 0, target = U16(*ptr);
+ int execute = 0, target = get_u16(ctx->ctx->bios, *ptr);
unsigned long cjiffies;
(*ptr) += 2;
@@ -748,7 +749,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, mask, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -765,7 +766,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, saved;
int dptr = *ptr;
if (((attr >> 3) & 7) != ATOM_SRC_DWORD)
@@ -782,7 +783,7 @@ static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -798,7 +799,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -812,7 +813,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("POST card output: 0x%02X\n", val);
}
@@ -833,7 +834,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8(*ptr);
+ int idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
SDEBUG(" block: %d\n", idx);
if (!idx)
@@ -841,13 +842,14 @@ static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
else if (idx == 255)
ctx->ctx->data_block = ctx->start;
else
- ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx);
+ ctx->ctx->data_block = get_u16(ctx->ctx->bios,
+ ctx->ctx->data_table + 4 + 2 * idx);
SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block);
}
static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" fb_base: ");
ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr);
}
@@ -857,7 +859,7 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
int port;
switch (arg) {
case ATOM_PORT_ATI:
- port = U16(*ptr);
+ port = get_u16(ctx->ctx->bios, *ptr);
if (port < ATOM_IO_NAMES_CNT)
SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]);
else
@@ -881,14 +883,14 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)
{
- ctx->ctx->reg_block = U16(*ptr);
+ ctx->ctx->reg_block = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block);
}
static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -904,7 +906,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -920,7 +922,7 @@ static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -939,7 +941,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -958,7 +960,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -972,18 +974,18 @@ static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, val, target;
SDEBUG(" switch: ");
src = atom_get_src(ctx, attr, ptr);
- while (U16(*ptr) != ATOM_CASE_END)
- if (U8(*ptr) == ATOM_CASE_MAGIC) {
+ while (get_u16(ctx->ctx->bios, *ptr) != ATOM_CASE_END)
+ if (get_u8(ctx->ctx->bios, *ptr) == ATOM_CASE_MAGIC) {
(*ptr)++;
SDEBUG(" case: ");
val =
atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM,
ptr);
- target = U16(*ptr);
+ target = get_u16(ctx->ctx->bios, *ptr);
if (val == src) {
SDEBUG(" target: %04X\n", target);
*ptr = ctx->start + target;
@@ -999,7 +1001,7 @@ static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -1011,7 +1013,7 @@ static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1158,7 +1160,7 @@ atom_op_debug, 0},};
static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t * params)
{
- int base = CU16(ctx->cmd_table + 4 + 2 * index);
+ int base = get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index);
int len, ws, ps, ptr;
unsigned char op;
atom_exec_context ectx;
@@ -1167,9 +1169,9 @@ static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32
if (!base)
return -EINVAL;
- len = CU16(base + ATOM_CT_SIZE_PTR);
- ws = CU8(base + ATOM_CT_WS_PTR);
- ps = CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
+ len = get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR);
+ ws = get_u8(ctx->bios, base + ATOM_CT_WS_PTR);
+ ps = get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
ptr = base + ATOM_CT_CODE_PTR;
SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps);
@@ -1187,7 +1189,7 @@ static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32
debug_depth++;
while (1) {
- op = CU8(ptr++);
+ op = get_u8(ctx->bios, ptr++);
if (op < ATOM_OP_NAMES_CNT)
SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1);
else
@@ -1253,11 +1255,11 @@ static void atom_index_iio(struct atom_context *ctx, int base)
ctx->iio = kzalloc(2 * 256, GFP_KERNEL);
if (!ctx->iio)
return;
- while (CU8(base) == ATOM_IIO_START) {
- ctx->iio[CU8(base + 1)] = base + 2;
+ while (get_u8(ctx->bios, base) == ATOM_IIO_START) {
+ ctx->iio[get_u8(ctx->bios, base + 1)] = base + 2;
base += 2;
- while (CU8(base) != ATOM_IIO_END)
- base += atom_iio_len[CU8(base)];
+ while (get_u8(ctx->bios, base) != ATOM_IIO_END)
+ base += atom_iio_len[get_u8(ctx->bios, base)];
base += 3;
}
}
@@ -1277,7 +1279,7 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
ctx->card = card;
ctx->bios = bios;
- if (CU16(0) != ATOM_BIOS_MAGIC) {
+ if (get_u16(ctx->bios, 0) != ATOM_BIOS_MAGIC) {
pr_info("Invalid BIOS magic\n");
kfree(ctx);
return NULL;
@@ -1290,7 +1292,7 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
return NULL;
}
- base = CU16(ATOM_ROM_TABLE_PTR);
+ base = get_u16(ctx->bios, ATOM_ROM_TABLE_PTR);
if (strncmp
(CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC,
strlen(ATOM_ROM_MAGIC))) {
@@ -1299,15 +1301,16 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
return NULL;
}
- ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR);
- ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR);
- atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
+ ctx->cmd_table = get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR);
+ ctx->data_table = get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR);
+ atom_index_iio(ctx,
+ get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
if (!ctx->iio) {
atom_destroy(ctx);
return NULL;
}
- str = CSTR(CU16(base + ATOM_ROM_MSG_PTR));
+ str = CSTR(get_u16(ctx->bios, base + ATOM_ROM_MSG_PTR));
while (*str && ((*str == '\n') || (*str == '\r')))
str++;
/* name string isn't always 0 terminated */
@@ -1326,18 +1329,18 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
int atom_asic_init(struct atom_context *ctx)
{
struct radeon_device *rdev = ctx->card->dev->dev_private;
- int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
+ int hwi = get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR);
uint32_t ps[16];
int ret;
memset(ps, 0, 64);
- ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
- ps[1] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR));
+ ps[0] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR));
+ ps[1] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR));
if (!ps[0] || !ps[1])
return 1;
- if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
+ if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
return 1;
ret = atom_execute_table(ctx, ATOM_CMD_INIT, ps);
if (ret)
@@ -1346,7 +1349,7 @@ int atom_asic_init(struct atom_context *ctx)
memset(ps, 0, 64);
if (rdev->family < CHIP_R600) {
- if (CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
+ if (get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
atom_execute_table(ctx, ATOM_CMD_SPDFANCNTL, ps);
}
return ret;
@@ -1363,18 +1366,18 @@ bool atom_parse_data_header(struct atom_context *ctx, int index,
uint16_t * data_start)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->data_table + offset);
+ int idx = get_u16(ctx->bios, ctx->data_table + offset);
u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4);
if (!mdt[index])
return false;
if (size)
- *size = CU16(idx);
+ *size = get_u16(ctx->bios, idx);
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
*data_start = idx;
return true;
}
@@ -1383,16 +1386,16 @@ bool atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t * frev,
uint8_t * crev)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->cmd_table + offset);
+ int idx = get_u16(ctx->bios, ctx->cmd_table + offset);
u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4);
if (!mct[index])
return false;
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
return true;
}