diff --git a/sis8300bcmApp/Db/sis8300bcm-fiber.template b/sis8300bcmApp/Db/sis8300bcm-fiber.template
new file mode 100644
index 0000000000000000000000000000000000000000..145e16490ad6dac6af57500f181c130fd0ce49f4
--- /dev/null
+++ b/sis8300bcmApp/Db/sis8300bcm-fiber.template
@@ -0,0 +1,136 @@
+#=================================================================#
+# Template file: sis8300bcm-fibr.template
+# Database for the records specific to the FIBER block of the 
+# individual BCM channel
+# Juliano Murari
+# July 20, 2022
+
+record(mbbo, "$(P)$(R)OutDataSelect")
+{
+    field(DTYP, "asynInt32")
+    field(OUT,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.FIBER.OUT_DATA_SELECT")
+    field(ZRVL, "0")
+    field(ZRST, "ACCT Ch01")
+    field(ONVL, "1")
+    field(ONST, "ACCT Ch02")
+    field(TWVL, "2")
+    field(TWST, "ACCT Ch03")
+    field(THVL, "3")
+    field(THST, "ACCT Ch04")
+    field(FRVL, "4")
+    field(FRST, "ACCT Ch05")
+    field(FVVL, "5")
+    field(FVST, "ACCT Ch06")
+    field(SXVL, "6")
+    field(SXST, "ACCT Ch07")
+    field(SVVL, "7")
+    field(SVST, "ACCT Ch08")
+    field(EIVL, "8")
+    field(EIST, "ACCT Ch09")
+    field(NIVL, "9")
+    field(NIST, "ACCT Ch10")
+    field(ASG,  "critical")
+    info(autosaveFields, "VAL")
+}
+
+record(mbbi, "$(P)$(R)OutDataSelectR")
+{
+    field(DTYP, "asynInt32")
+    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.FIBER.OUT_DATA_SELECT")
+    field(SCAN, "I/O Intr")
+    field(ZRVL, "0")
+    field(ZRST, "ACCT Ch01")
+    field(ONVL, "1")
+    field(ONST, "ACCT Ch02")
+    field(TWVL, "2")
+    field(TWST, "ACCT Ch03")
+    field(THVL, "3")
+    field(THST, "ACCT Ch04")
+    field(FRVL, "4")
+    field(FRST, "ACCT Ch05")
+    field(FVVL, "5")
+    field(FVST, "ACCT Ch06")
+    field(SXVL, "6")
+    field(SXST, "ACCT Ch07")
+    field(SVVL, "7")
+    field(SVST, "ACCT Ch08")
+    field(EIVL, "8")
+    field(EIST, "ACCT Ch09")
+    field(NIVL, "9")
+    field(NIST, "ACCT Ch10")
+}
+
+record(bo, "$(P)$(R)OutDataEnable")
+{
+    field(DTYP, "asynInt32")
+    field(OUT,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.FIBER.OUT_DATA_ENABLE")
+    field(ZNAM, "Disabled")
+    field(ONAM, "Enabled")
+    field(VAL,  "0")
+    field(PINI, "YES")
+    field(ASG,  "critical")
+    info(autosaveFields, "VAL")
+}
+record(bi, "$(P)$(R)OutDataEnableR")
+{
+    field(DTYP, "asynInt32")
+    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.FIBER.OUT_DATA_ENABLE")
+    field(ZNAM, "Disabled")
+    field(ONAM, "Enabled")
+    field(SCAN, "I/O Intr")
+}
+
+record(bi, "$(P)$(R)SFPPresentR")
+{
+    field(DTYP, "asynInt32")
+    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.FIBER.SFP_PRESENT")
+    field(ZNAM, "No")
+    field(ONAM, "Yes")
+    field(SCAN, "I/O Intr")
+}
+
+record(bi, "$(P)$(R)LaneUpR")
+{
+    field(DTYP, "asynInt32")
+    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.FIBER.LANE_UP")
+    field(ZNAM, "No")
+    field(ONAM, "Yes")
+    field(SCAN, "I/O Intr")
+}
+
+record(bi, "$(P)$(R)ChannelUpR")
+{
+    field(DTYP, "asynInt32")
+    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.FIBER.CHANNEL_UP")
+    field(ZNAM, "No")
+    field(ONAM, "Yes")
+    field(SCAN, "I/O Intr")
+}
+
+record(bi, "$(P)$(R)HardwareErrorR")
+{
+    field(DTYP, "asynInt32")
+    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.FIBER.HARDWARE_ERROR")
+    field(ZNAM, "No")
+    field(ONAM, "Yes")
+    field(SCAN, "I/O Intr")
+}
+
+record(bi, "$(P)$(R)SoftwareErrorR")
+{
+    field(DTYP, "asynInt32")
+    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.FIBER.SOFTWARE_ERROR")
+    field(ZNAM, "No")
+    field(ONAM, "Yes")
+    field(SCAN, "I/O Intr")
+}
+
+record(bo, "$(P)$(R)Reset")
+{
+    field(DTYP, "asynInt32")
+    field(OUT,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.FIBER.RESET")
+    field(ZNAM, "No")
+    field(ONAM, "Yes")
+    field(HIGH, "1")
+    field(ASG,  "critical")
+}
diff --git a/sis8300bcmApp/src/sis8300bcm.cpp b/sis8300bcmApp/src/sis8300bcm.cpp
index 705aea1b672d31c506dd3e78a85864554d365686..3ee42ce92712593f529f488d6144a0391c99b448 100644
--- a/sis8300bcmApp/src/sis8300bcm.cpp
+++ b/sis8300bcmApp/src/sis8300bcm.cpp
@@ -315,6 +315,15 @@ sis8300bcm::sis8300bcm(const char *portName, const char *devicePath,
     // PROBE block, channel specific
     createParam(BCMProbeChannelString,                      asynParamInt32,     &BCMProbeChannel);
     createParam(BCMProbeSourceString,                       asynParamInt32,     &BCMProbeSource);
+    // FIBER block, channel specific
+    createParam(BCMFiberOutDataSelectString,                asynParamInt32,     &BCMFiberOutDataSelect);
+    createParam(BCMFiberOutDataEnableString,                asynParamInt32,     &BCMFiberOutDataEnable);
+    createParam(BCMFiberSFPPresentString,                   asynParamInt32,     &BCMFiberSFPPresent);
+    createParam(BCMFiberLaneUpString,                       asynParamInt32,     &BCMFiberLaneUp);
+    createParam(BCMFiberChannelUpString,                    asynParamInt32,     &BCMFiberChannelUp);
+    createParam(BCMFiberHardwareErrorString,                asynParamInt32,     &BCMFiberHardwareError);
+    createParam(BCMFiberSoftwareErrorString,                asynParamInt32,     &BCMFiberSoftwareError);
+    createParam(BCMFiberResetString,                        asynParamInt32,     &BCMFiberReset);
     // LUT, channel specific
     char buf[255];
     for (int i = 0; i < BCM_LUT_SIZE; i++) {
@@ -1357,6 +1366,54 @@ int sis8300bcm::deviceDone()
         setIntegerParam(addr, BCMDiffAlarmLeakyDirect, (uintValue & 0x08) ? 1 : 0);
     }
 
+    // readback FIBER parameters
+    for (int addr = 0; addr < SIS8300BCM_NUM_FIBER_CHANNELS; addr++) {
+        asynPrintDeviceInfo(pasynUserSelf, "readback FIBER %d parameters", addr);
+
+        ret = sis8300drvbcm_get_fiber_out_data_select(mDeviceHandle, addr, &uintValue);
+        if (ret) {
+            asynPrintError(pasynUserSelf, "sis8300drvbcm_get_fiber_out_data_select returned %d", ret);
+            return ret;
+        }
+        setIntegerParam(addr, BCMFiberOutDataSelect, uintValue);
+        ret = sis8300drvbcm_get_fiber_out_data_enable(mDeviceHandle, addr, &uintValue);
+        if (ret) {
+            asynPrintError(pasynUserSelf, "sis8300drvbcm_get_fiber_out_data_enable returned %d", ret);
+            return ret;
+        }
+        setIntegerParam(addr, BCMFiberOutDataEnable, uintValue);
+        ret = sis8300drvbcm_get_fiber_sfp_present(mDeviceHandle, addr, &uintValue);
+        if (ret) {
+            asynPrintError(pasynUserSelf, "sis8300drvbcm_get_fiber_sfp_present returned %d", ret);
+            return ret;
+        }
+        setIntegerParam(addr, BCMFiberSFPPresent, uintValue);
+        ret = sis8300drvbcm_get_fiber_lane_up(mDeviceHandle, addr, &uintValue);
+        if (ret) {
+            asynPrintError(pasynUserSelf, "sis8300drvbcm_get_fiber_lane_up returned %d", ret);
+            return ret;
+        }
+        setIntegerParam(addr, BCMFiberLaneUp, uintValue);
+        ret = sis8300drvbcm_get_fiber_channel_up(mDeviceHandle, addr, &uintValue);
+        if (ret) {
+            asynPrintError(pasynUserSelf, "sis8300drvbcm_get_fiber_channel_up returned %d", ret);
+            return ret;
+        }
+        setIntegerParam(addr, BCMFiberChannelUp, uintValue);
+        ret = sis8300drvbcm_get_fiber_hardware_error(mDeviceHandle, addr, &uintValue);
+        if (ret) {
+            asynPrintError(pasynUserSelf, "sis8300drvbcm_get_fiber_hardware_error returned %d", ret);
+            return ret;
+        }
+        setIntegerParam(addr, BCMFiberHardwareError, uintValue);
+        ret = sis8300drvbcm_get_fiber_software_error(mDeviceHandle, addr, &uintValue);
+        if (ret) {
+            asynPrintError(pasynUserSelf, "sis8300drvbcm_get_fiber_software_error returned %d", ret);
+            return ret;
+        }
+        setIntegerParam(addr, BCMFiberSoftwareError, uintValue);
+    }
+
     return ret;
 }
 
@@ -1865,12 +1922,27 @@ asynStatus sis8300bcm::writeInt32(asynUser *pasynUser, epicsInt32 value)
         if (ret) {
             asynPrintError(pasynUserSelf, "sis8300drvbcm_set_channel_trigger_source returned %d", ret);
         }
+    } else if (function == BCMFiberOutDataSelect) {
+        ret = sis8300drvbcm_set_fiber_out_data_select(mDeviceHandle, addr, value);
+        if (ret) {
+            asynPrintError(pasynUserSelf, "sis8300drvbcm_set_fiber_out_data_select returned %d", ret);
+        }
+    } else if (function == BCMFiberOutDataEnable) {
+        ret = sis8300drvbcm_set_fiber_out_data_enable(mDeviceHandle, addr, value);
+        if (ret) {
+            asynPrintError(pasynUserSelf, "sis8300drvbcm_set_fiber_out_data_enable returned %d", ret);
+        }
+
+    } else if (function == BCMFiberReset) {
+        ret = sis8300drvbcm_set_fiber_reset(mDeviceHandle, addr, value);
+        if (ret) {
+            asynPrintError(pasynUserSelf, "sis8300drvbcm_set_fiber_reset returned %d", ret);
+        }
     } else {
         if (function < BCM_FIRST_PARAM) {
             status = sis8300::writeInt32(pasynUser, value);
         }
     }
-
     if (ret) {
         status = asynError;
         snprintf(mMessageBuffer, MAX_MESSAGE_LENGTH, "[%s,%d,%s] set failed: value %d", portName, addr, name, value);
diff --git a/sis8300bcmApp/src/sis8300bcm.h b/sis8300bcmApp/src/sis8300bcm.h
index 57fc74b830d8d9e0d6b0ecb46732121f2a020bf7..aa1a71009c01812a7516a0a73a50e861a7c2a612 100644
--- a/sis8300bcmApp/src/sis8300bcm.h
+++ b/sis8300bcmApp/src/sis8300bcm.h
@@ -211,6 +211,15 @@
 // PROBE block, channel specific
 #define BCMProbeChannelString                        "BCM.PROBE.CHANNEL"
 #define BCMProbeSourceString                         "BCM.PROBE.SOURCE"
+// FIBER block, channel specific
+#define BCMFiberOutDataSelectString                  "BCM.FIBER.OUT_DATA_SELECT"
+#define BCMFiberOutDataEnableString                  "BCM.FIBER.OUT_DATA_ENABLE"
+#define BCMFiberSFPPresentString                     "BCM.FIBER.SFP_PRESENT"
+#define BCMFiberLaneUpString                         "BCM.FIBER.LANE_UP"
+#define BCMFiberChannelUpString                      "BCM.FIBER.CHANNEL_UP"
+#define BCMFiberHardwareErrorString                  "BCM.FIBER.HARDWARE_ERROR"
+#define BCMFiberSoftwareErrorString                  "BCM.FIBER.SOFTWARE_ERROR"
+#define BCMFiberResetString                          "BCM.FIBER.RESET"
 // LUT, board specific, 16 locations
 #define BCMLutDestinationIDString                    "BCM.LUT%d.DEST_ID"
 #define BCMLutMinTriggerPeriodString                 "BCM.LUT%d.MIN_TRIGGER_PERIOD"
@@ -422,6 +431,15 @@ protected:
     // PROBE block, channel specific
     int BCMProbeChannel;
     int BCMProbeSource;
+    // FIBER block, channel specific
+    int BCMFiberOutDataSelect;
+    int BCMFiberOutDataEnable;
+    int BCMFiberSFPPresent;
+    int BCMFiberLaneUp;
+    int BCMFiberChannelUp;
+    int BCMFiberHardwareError;
+    int BCMFiberSoftwareError;
+    int BCMFiberReset;
     // LUT, board specific
     int BCMLutDestinationID[BCM_LUT_SIZE];
     int BCMLutMinTriggerPeriod[BCM_LUT_SIZE];
diff --git a/vendor/ess/lib/sis8300bcm_reg.h b/vendor/ess/lib/sis8300bcm_reg.h
index d3f2dc6b1d41424eb552cb14ddb77a96acc99433..62a96e43e3256d5a156f318f2ba1a6407dcafc8b 100644
--- a/vendor/ess/lib/sis8300bcm_reg.h
+++ b/vendor/ess/lib/sis8300bcm_reg.h
@@ -184,6 +184,13 @@ extern "C" {
  */
 #define SIS8300BCM_PROB_X_SOURCE_OFF                    0x000
 
+/*
+ FIBER block registers
+ */
+#define SIS8300BCM_FIBR_X_OUT_DATA_SELECT_OFF           0x000
+#define SIS8300BCM_FIBR_X_STATUS_OFF                    0x001
+#define SIS8300BCM_FIBR_X_RESET_OFF                     0x002
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/vendor/ess/lib/sis8300drvbcm.c b/vendor/ess/lib/sis8300drvbcm.c
index 36cb001a40758626b2cc3140709c1b56a1a0de95..70581cbb98e8bc3c7e0c17a7d9c8cefd7772629d 100644
--- a/vendor/ess/lib/sis8300drvbcm.c
+++ b/vendor/ess/lib/sis8300drvbcm.c
@@ -2791,3 +2791,180 @@ int sis8300drvbcm_get_channel_beam_above_threshold(sis8300drv_usr *sisuser, unsi
     // printf("%s: channel %d, reg 0x%x, value: %d\n", __func__, channel, reg, value);
     return ret;
 }
+
+// used to control fiber out data select
+int sis8300drvbcm_set_fiber_out_data_select(sis8300drv_usr *sisuser, unsigned int channel, unsigned int selection)
+{
+    unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
+            (SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
+            SIS8300BCM_FIBR_BANK_OFF + \
+            SIS8300BCM_FIBR_X_OUT_DATA_SELECT_OFF;
+    unsigned int value;
+    // register has lowest 5 bits defined
+    int ret = sis8300drv_reg_read(sisuser, reg, &value);
+    if (ret) {
+        return ret;
+    }
+    // out data select is controlled by lowest 4 bits
+    selection &= 0xF;
+    selection += (value & (1 << 4));  // preserve enable bit
+    ret = sis8300drv_reg_write(sisuser, reg, selection);
+    return ret;
+}
+
+int sis8300drvbcm_get_fiber_out_data_select(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *selection)
+{
+    unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
+            (SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
+            SIS8300BCM_FIBR_BANK_OFF + \
+            SIS8300BCM_FIBR_X_OUT_DATA_SELECT_OFF;
+    // register has lowest 4 bits defined
+    int ret = sis8300drv_reg_read(sisuser, reg, selection);
+    if (ret) {
+        return ret;
+    }
+    *selection &= 0xF;
+    return ret;
+}
+
+int sis8300drvbcm_set_fiber_out_data_enable(sis8300drv_usr *sisuser, unsigned int channel, unsigned int enable)
+{
+    unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
+            (SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
+            SIS8300BCM_FIBR_BANK_OFF + \
+            SIS8300BCM_FIBR_X_OUT_DATA_SELECT_OFF;
+    unsigned int value;
+    // register has lowest 5 bits defined
+    int ret = sis8300drv_reg_read(sisuser, reg, &value);
+    if (ret) {
+        return ret;
+    }
+    value &= 0x1F;
+    // out data enable is controlled by bit 4
+    if (enable) {
+        value |= (1 << 4);
+    } else {
+        value &= ~(1 << 4);
+    }
+    ret = sis8300drv_reg_write(sisuser, reg, value);
+    return ret;
+}
+
+int sis8300drvbcm_get_fiber_out_data_enable(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *enable)
+{
+    unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
+            (SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
+            SIS8300BCM_FIBR_BANK_OFF + \
+            SIS8300BCM_FIBR_X_OUT_DATA_SELECT_OFF;
+    unsigned int value;
+    // register has lowest 5 bits defined
+    int ret = sis8300drv_reg_read(sisuser, reg, &value);
+    if (ret) {
+        return ret;
+    }
+    // out data select enable is in bit 4
+    *enable = (value & (1 << 4)) ? 1 : 0;
+    return ret;
+}
+
+// used to control fiber status bits
+int sis8300drvbcm_get_fiber_sfp_present(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *sfp_present)
+{
+    unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
+            (SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
+            SIS8300BCM_FIBR_BANK_OFF + \
+            SIS8300BCM_FIBR_X_STATUS_OFF;
+    unsigned int value;
+    // register has lowest 5 bits defined
+    int ret = sis8300drv_reg_read(sisuser, reg, &value);
+    if (ret) {
+        return ret;
+    }
+    // SFP present status is in bit 0
+    *sfp_present = (value & (1 << 0)) ? 1 : 0;
+    //printf("%s: channel %d, fiber status: 0x%x, sfp_present: %d\n", __func__, channel, value, *sfp_present);
+    return ret;
+}
+
+int sis8300drvbcm_get_fiber_lane_up(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *lane_up)
+{
+    unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
+            (SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
+            SIS8300BCM_FIBR_BANK_OFF + \
+            SIS8300BCM_FIBR_X_STATUS_OFF;
+    unsigned int value;
+    // register has lowest 5 bits defined
+    int ret = sis8300drv_reg_read(sisuser, reg, &value);
+    if (ret) {
+        return ret;
+    }
+    // lane up status is in bit 1
+    *lane_up = (value & (1 << 1)) ? 1 : 0;
+    //printf("%s: channel %d, fiber status: 0x%x, lane_up: %d\n", __func__, channel, value, *lane_up);
+    return ret;
+}
+
+int sis8300drvbcm_get_fiber_channel_up(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *channel_up)
+{
+    unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
+            (SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
+            SIS8300BCM_FIBR_BANK_OFF + \
+            SIS8300BCM_FIBR_X_STATUS_OFF;
+    unsigned int value;
+    // register has lowest 5 bits defined
+    int ret = sis8300drv_reg_read(sisuser, reg, &value);
+    if (ret) {
+        return ret;
+    }
+    // channel up status is in bit 2
+    *channel_up = (value & (1 << 2)) ? 1 : 0;
+    //printf("%s: channel %d, fiber status: 0x%x, channel_up: %d\n", __func__, channel, value, *channel_up);
+    return ret;
+}
+
+int sis8300drvbcm_get_fiber_hardware_error(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *hardware_error)
+{
+    unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
+            (SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
+            SIS8300BCM_FIBR_BANK_OFF + \
+            SIS8300BCM_FIBR_X_STATUS_OFF;
+    unsigned int value;
+    // register has lowest 5 bits defined
+    int ret = sis8300drv_reg_read(sisuser, reg, &value);
+    if (ret) {
+        return ret;
+    }
+    // hardware error status is in bit 3
+    *hardware_error = (value & (1 << 3)) ? 1 : 0;
+    //printf("%s: channel %d, fiber status: 0x%x, hardware_error: %d\n", __func__, channel, value, *hardware_error);
+    return ret;
+}
+
+int sis8300drvbcm_get_fiber_software_error(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *software_error)
+{
+    unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
+            (SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
+            SIS8300BCM_FIBR_BANK_OFF + \
+            SIS8300BCM_FIBR_X_STATUS_OFF;
+    unsigned int value;
+    // register has lowest 5 bits defined
+    int ret = sis8300drv_reg_read(sisuser, reg, &value);
+    if (ret) {
+        return ret;
+    }
+    // software error status is in bit 4
+    *software_error = (value & (1 << 4)) ? 1 : 0;
+    //printf("%s: channel %d, fiber status: 0x%x, software_error: %d\n", __func__, channel, value, *software_error);
+    return ret;
+}
+
+int sis8300drvbcm_set_fiber_reset(sis8300drv_usr *sisuser, unsigned int channel, unsigned int reset)
+{
+    unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
+            (SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
+            SIS8300BCM_FIBR_BANK_OFF + \
+            SIS8300BCM_FIBR_X_RESET_OFF;
+    int ret = sis8300drv_reg_write(sisuser, reg, reset);
+    return ret;
+}
+
diff --git a/vendor/ess/lib/sis8300drvbcm.h b/vendor/ess/lib/sis8300drvbcm.h
index 48eeafd6d45ca839d115a3ed53ad8fea9db5d0da..ba82e427cb86dab53d4e978b478db5d9b38aaefb 100644
--- a/vendor/ess/lib/sis8300drvbcm.h
+++ b/vendor/ess/lib/sis8300drvbcm.h
@@ -83,6 +83,8 @@ typedef enum {
 #define SIS8300BCM_NUM_PROBE_CHANNELS   4
 #define SIS8300BCM_NUM_CHANNELS         24
 
+#define SIS8300BCM_NUM_FIBER_CHANNELS   2
+
 void sis8300drvbcm_set_sampling_frequency(sis8300drv_usr *sisuser, double frequency);
 void sis8300drvbcm_get_sampling_frequency(sis8300drv_usr *sisuser, double *frequency);
 int sis8300drvbcm_set_beam_trigger_source(sis8300drv_usr *sisuser, unsigned int source);
@@ -290,6 +292,16 @@ int sis8300drvbcm_get_differential_alarm_first(sis8300drv_usr *sisuser, unsigned
 int sis8300drvbcm_get_differential_alarm_direct(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *alarms);
 int sis8300drvbcm_set_enable_calibration_pulse(sis8300drv_usr *sisuser, unsigned int enable_calibration_pulse);
 int sis8300drvbcm_get_calibration_sample(sis8300drv_usr *sisuser, unsigned int channel, unsigned int index, double *sample);
+int sis8300drvbcm_set_fiber_out_data_select(sis8300drv_usr *sisuser, unsigned int channel, unsigned int selection);
+int sis8300drvbcm_get_fiber_out_data_select(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *selection);
+int sis8300drvbcm_set_fiber_out_data_enable(sis8300drv_usr *sisuser, unsigned int channel, unsigned int enable);
+int sis8300drvbcm_get_fiber_out_data_enable(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *enable);
+int sis8300drvbcm_get_fiber_sfp_present(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *sfp_present);
+int sis8300drvbcm_get_fiber_lane_up(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *lane_up);
+int sis8300drvbcm_get_fiber_channel_up(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *channel_up);
+int sis8300drvbcm_get_fiber_hardware_error(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *hardware_error);
+int sis8300drvbcm_get_fiber_software_error(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *software_error);
+int sis8300drvbcm_set_fiber_reset(sis8300drv_usr *sisuser, unsigned int channel, unsigned int reset);
 
 #ifdef __cplusplus
 }