From 14bc823024bd92fd9f7acfead41aa542eef431ba Mon Sep 17 00:00:00 2001 From: logicog Date: Wed, 4 Mar 2026 20:19:46 +0100 Subject: [PATCH] Add reg_bit_test function --- rtl837x_common.h | 1 + rtlplayground.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/rtl837x_common.h b/rtl837x_common.h index 8fe6764..c69d303 100644 --- a/rtl837x_common.h +++ b/rtl837x_common.h @@ -122,6 +122,7 @@ void print_reg(uint16_t reg); uint8_t sfp_read_reg(uint8_t slot, uint8_t reg); void reg_bit_set(uint16_t reg_addr, char bit); void reg_bit_clear(uint16_t reg_addr, char bit); +uint8_t reg_bit_test(uint16_t reg_addr, char bit); void sfr_mask_data(uint8_t n, uint8_t mask, uint8_t set); void sfr_set_zero(void); void reset_chip(void); diff --git a/rtlplayground.c b/rtlplayground.c index 6a16e31..041c7ed 100644 --- a/rtlplayground.c +++ b/rtlplayground.c @@ -457,6 +457,23 @@ void reg_bit_clear(uint16_t reg_addr, char bit) reg_write_m(reg_addr); } + +/* + * This sets a bit in the 32bit wide switch register reg_addr + */ +uint8_t reg_bit_test(uint16_t reg_addr, char bit) +{ + uint8_t bit_mask = 1 << (bit & 0x7); + + bit >>= 3; + reg_read_m(reg_addr); + bit_mask = bit_mask; + if (sfr_data[3-bit] & bit_mask) + return 1; + return 0; +} + + /* * This masks the sfr data fields, first &-ing with ~mask, then setting the bits in set */