+static int sllin_rx_validate(struct sllin *sl)
+{
+ int actual_id;
+ int ext_chcks_fl;
+ int lin_dlc;
+ unsigned char rec_chcksm = sl->rx_buff[sl->rx_cnt - 1];
+ struct sllin_conf_entry *scf;
+
+ actual_id = sl->rx_buff[SLLIN_BUFF_ID] & SLLIN_ID_MASK;
+ scf = &sl->linfr_cache[actual_id];
+ lin_dlc = scf->dlc;
+ ext_chcks_fl = scf->frame_fl & SLLIN_CHECKSUM_EXTENDED;
+
+ if (sllin_checksum(sl->rx_buff, sl->rx_cnt - 1, ext_chcks_fl) !=
+ rec_chcksm) {
+
+ /* Type of checksum is configured for particular frame */
+ if (lin_dlc > 0) {
+ return -1;
+ } else {
+ if (sllin_checksum(sl->rx_buff, sl->rx_cnt - 1,
+ !ext_chcks_fl) != rec_chcksm) {
+ return -1;
+ }
+ }
+ }
+
+ return 0;
+}