1*7b66bcb2SAndrew Jeffery /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ 2*7b66bcb2SAndrew Jeffery #include <libpldm/bcd.h> 3*7b66bcb2SAndrew Jeffery 4*7b66bcb2SAndrew Jeffery LIBPLDM_ABI_STABLE pldm_bcd_bcd2dec8(uint8_t bcd)5*7b66bcb2SAndrew Jefferyuint8_t pldm_bcd_bcd2dec8(uint8_t bcd) 6*7b66bcb2SAndrew Jeffery { 7*7b66bcb2SAndrew Jeffery return (bcd >> 4) * 10 + (bcd & 0x0f); 8*7b66bcb2SAndrew Jeffery } 9*7b66bcb2SAndrew Jeffery 10*7b66bcb2SAndrew Jeffery LIBPLDM_ABI_STABLE pldm_bcd_dec2bcd8(uint8_t dec)11*7b66bcb2SAndrew Jefferyuint8_t pldm_bcd_dec2bcd8(uint8_t dec) 12*7b66bcb2SAndrew Jeffery { 13*7b66bcb2SAndrew Jeffery return ((dec / 10) << 4) + (dec % 10); 14*7b66bcb2SAndrew Jeffery } 15*7b66bcb2SAndrew Jeffery 16*7b66bcb2SAndrew Jeffery LIBPLDM_ABI_STABLE pldm_bcd_bcd2dec16(uint16_t bcd)17*7b66bcb2SAndrew Jefferyuint16_t pldm_bcd_bcd2dec16(uint16_t bcd) 18*7b66bcb2SAndrew Jeffery { 19*7b66bcb2SAndrew Jeffery return pldm_bcd_bcd2dec8(bcd >> 8) * 100 + 20*7b66bcb2SAndrew Jeffery pldm_bcd_bcd2dec8(bcd & 0xff); 21*7b66bcb2SAndrew Jeffery } 22*7b66bcb2SAndrew Jeffery 23*7b66bcb2SAndrew Jeffery LIBPLDM_ABI_STABLE pldm_bcd_dec2bcd16(uint16_t dec)24*7b66bcb2SAndrew Jefferyuint16_t pldm_bcd_dec2bcd16(uint16_t dec) 25*7b66bcb2SAndrew Jeffery { 26*7b66bcb2SAndrew Jeffery return pldm_bcd_dec2bcd8(dec % 100) | 27*7b66bcb2SAndrew Jeffery ((uint16_t)(pldm_bcd_dec2bcd8(dec / 100)) << 8); 28*7b66bcb2SAndrew Jeffery } 29*7b66bcb2SAndrew Jeffery 30*7b66bcb2SAndrew Jeffery LIBPLDM_ABI_STABLE pldm_bcd_bcd2dec32(uint32_t bcd)31*7b66bcb2SAndrew Jefferyuint32_t pldm_bcd_bcd2dec32(uint32_t bcd) 32*7b66bcb2SAndrew Jeffery { 33*7b66bcb2SAndrew Jeffery return pldm_bcd_bcd2dec16(bcd >> 16) * 10000 + 34*7b66bcb2SAndrew Jeffery pldm_bcd_bcd2dec16(bcd & 0xffff); 35*7b66bcb2SAndrew Jeffery } 36*7b66bcb2SAndrew Jeffery 37*7b66bcb2SAndrew Jeffery LIBPLDM_ABI_STABLE pldm_bcd_dec2bcd32(uint32_t dec)38*7b66bcb2SAndrew Jefferyuint32_t pldm_bcd_dec2bcd32(uint32_t dec) 39*7b66bcb2SAndrew Jeffery { 40*7b66bcb2SAndrew Jeffery return pldm_bcd_dec2bcd16(dec % 10000) | 41*7b66bcb2SAndrew Jeffery ((uint32_t)(pldm_bcd_dec2bcd16(dec / 10000)) << 16); 42*7b66bcb2SAndrew Jeffery } 43