u16 id;
int severity; /* 0:NONFATAL | 1:FATAL | 2:COR */
int flags;
+ int first;
unsigned int status; /* COR/UNCOR Error Status */
unsigned int mask; /* COR/UNCOR Error Mask */
struct header_log_regs tlp; /* TLP Header */
static int get_device_error_info(struct pci_dev *dev, struct aer_err_info *info)
{
- int pos;
+ int pos, temp;
info->status = 0;
info->flags &= ~AER_TLP_HEADER_VALID_FLAG;
if (!(info->status & ~info->mask))
return AER_UNSUCCESS;
+ /* Get First Error Pointer */
+ pci_read_config_dword(dev, pos + PCI_ERR_CAP, &temp);
+ info->first = PCI_ERR_CAP_FEP(temp);
+
if (info->status & AER_LOG_TLP_MASKS) {
info->flags |= AER_TLP_HEADER_VALID_FLAG;
pci_read_config_dword(dev,
errmsg = aer_uncorrectable_error_string[i];
if (errmsg)
- AER_PR(info, "%s\t:\n", errmsg);
+ AER_PR(info, "%s\t: %s\n", errmsg,
+ info->first == i ? "First" : "");
else
- AER_PR(info, "Unknown Error Bit %2d \t:\n", i);
-
- break;
+ AER_PR(info, "Unknown Error Bit %2d \t: %s\n",
+ i, info->first == i ? "First" : "");
}
}