Skip to contentSkip to conversation

crypto: Add support for Intel(R) QuickAssist

RFC PATCH Superseded Tadeusz Struk 2 participants 5 messages Jun 4, 2014 – Jun 6, 2014 6 messages not in the archive

Subsystems (3)

v3 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

v3 cover crypto: Add support for Intel(R) QuickAssist

Hi,
This patchset adds support for Intel(R) QuickAssist Technology (QAT) and DH895xCC hardware accelerator.
First patch adds a common infractructure that will be used by all QAT devices.
Second patch adds a firmware loader module that is used to load the microcode to the acceleration engines and start them.
Third patch adds dh895xcc hardware specific code, which hooks to the common infrastructure and provides acceleration for
the following algorithms:
authenc(hmac(sha1),cbc(aes)), authenc(hmac(sha256),cbc(aes)), authenc(hmac(sha512),cbc(aes))
Fourth patch updates makefiles etc.

More info on the hardware accelerator and the Quick Assist Technology can be found on:
https://01.org/packet-processing/intel%C2%AE-quickassist-technology-drivers-and-patches

---

Tadeusz Struk (4):
crypto: Intel(R) QAT driver framework
crypto: Intel(R) QAT FW Loader
crypto: Intel(R) QAT dh895xcc accelerator
crypto: Update to makefiles

 Documentation/ioctl/ioctl-number.txt               |    1 
 MAINTAINERS                                        |    6 
 drivers/crypto/Kconfig                             |    1 
 drivers/crypto/Makefile                            |    1 
 drivers/crypto/qat/Kconfig                         |   22 
 drivers/crypto/qat/Makefile                        |    2 
 drivers/crypto/qat/qat_common/Makefile             |   14 
 drivers/crypto/qat/qat_common/adf_accel_devices.h  |  204 +++
 drivers/crypto/qat/qat_common/adf_accel_engine.c   |  168 ++
 drivers/crypto/qat/qat_common/adf_aer.c            |  258 ++++
 drivers/crypto/qat/qat_common/adf_cfg.c            |  359 +++++
 drivers/crypto/qat/qat_common/adf_cfg.h            |   87 +
 drivers/crypto/qat/qat_common/adf_cfg_common.h     |  100 +
 drivers/crypto/qat/qat_common/adf_cfg_strings.h    |   83 +
 drivers/crypto/qat/qat_common/adf_cfg_user.h       |   94 +
 drivers/crypto/qat/qat_common/adf_common_drv.h     |  192 +++
 drivers/crypto/qat/qat_common/adf_ctl_drv.c        |  490 +++++++
 drivers/crypto/qat/qat_common/adf_dev_mgr.c        |  215 +++
 drivers/crypto/qat/qat_common/adf_init.c           |  388 ++++++
 drivers/crypto/qat/qat_common/adf_transport.c      |  565 ++++++++
 drivers/crypto/qat/qat_common/adf_transport.h      |   63 +
 .../qat/qat_common/adf_transport_access_macros.h   |  160 ++
 .../crypto/qat/qat_common/adf_transport_debug.c    |  301 ++++
 .../crypto/qat/qat_common/adf_transport_internal.h |  115 ++
 drivers/crypto/qat/qat_common/icp_qat_fw.h         |  316 +++++
 .../crypto/qat/qat_common/icp_qat_fw_init_admin.h  |  131 ++
 drivers/crypto/qat/qat_common/icp_qat_fw_la.h      |  403 ++++++
 .../qat/qat_common/icp_qat_fw_loader_handle.h      |   78 +
 drivers/crypto/qat/qat_common/icp_qat_hal.h        |  125 ++
 drivers/crypto/qat/qat_common/icp_qat_hw.h         |  305 ++++
 drivers/crypto/qat/qat_common/icp_qat_uclo.h       |  377 +++++
 drivers/crypto/qat/qat_common/qat_algs.c           | 1034 +++++++++++++++
 drivers/crypto/qat/qat_common/qat_crypto.c         |  284 ++++
 drivers/crypto/qat/qat_common/qat_crypto.h         |   83 +
 drivers/crypto/qat/qat_common/qat_hal.c            | 1402 ++++++++++++++++++++
 drivers/crypto/qat/qat_common/qat_uclo.c           | 1192 +++++++++++++++++
 drivers/crypto/qat/qat_dh895xcc/Makefile           |    8 
 drivers/crypto/qat/qat_dh895xcc/adf_admin.c        |  144 ++
 .../crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c |  214 +++
 .../crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.h |   86 +
 drivers/crypto/qat/qat_dh895xcc/adf_drv.c          |  448 ++++++
 drivers/crypto/qat/qat_dh895xcc/adf_drv.h          |   67 +
 drivers/crypto/qat/qat_dh895xcc/adf_hw_arbiter.c   |  159 ++
 drivers/crypto/qat/qat_dh895xcc/adf_isr.c          |  266 ++++
 drivers/crypto/qat/qat_dh895xcc/qat_admin.c        |  107 ++
 45 files changed, 11118 insertions(+)
 create mode 100644 drivers/crypto/qat/Kconfig
 create mode 100644 drivers/crypto/qat/Makefile
 create mode 100644 drivers/crypto/qat/qat_common/Makefile
 create mode 100644 drivers/crypto/qat/qat_common/adf_accel_devices.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_accel_engine.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_aer.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_cfg.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_cfg.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_cfg_common.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_cfg_strings.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_cfg_user.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_common_drv.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_ctl_drv.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_dev_mgr.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_init.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_transport.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_transport.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_transport_access_macros.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_transport_debug.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_transport_internal.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_fw.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_fw_init_admin.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_fw_la.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_fw_loader_handle.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_hal.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_hw.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_uclo.h
 create mode 100644 drivers/crypto/qat/qat_common/qat_algs.c
 create mode 100644 drivers/crypto/qat/qat_common/qat_crypto.c
 create mode 100644 drivers/crypto/qat/qat_common/qat_crypto.h
 create mode 100644 drivers/crypto/qat/qat_common/qat_hal.c
 create mode 100644 drivers/crypto/qat/qat_common/qat_uclo.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/Makefile
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_admin.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.h
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_drv.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_drv.h
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_hw_arbiter.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_isr.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/qat_admin.c
Signature · 1 line
Tadeusz Struk
#1 lore raw

RFC PATCH v3 3/4 crypto: Intel(R) QAT dh895xcc accelerator

Third patch adds DH895xCC hardware specific code.
It hooks to the common infrastructure and provides acceleration for crypto algorithms.

---

 drivers/crypto/qat/qat_dh895xcc/Makefile           |    8 
 drivers/crypto/qat/qat_dh895xcc/adf_admin.c        |  144 ++++++
 .../crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c |  214 ++++++++++
 .../crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.h |   86 ++++
 drivers/crypto/qat/qat_dh895xcc/adf_drv.c          |  448 ++++++++++++++++++++
 drivers/crypto/qat/qat_dh895xcc/adf_drv.h          |   67 +++
 drivers/crypto/qat/qat_dh895xcc/adf_hw_arbiter.c   |  159 +++++++
 drivers/crypto/qat/qat_dh895xcc/adf_isr.c          |  266 ++++++++++++
 drivers/crypto/qat/qat_dh895xcc/qat_admin.c        |  107 +++++
 9 files changed, 1499 insertions(+)
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/Makefile
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_admin.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.h
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_drv.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_drv.h
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_hw_arbiter.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_isr.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/qat_admin.c
drivers/crypto/qat/qat_dh895xcc/Makefile new file +8 -0
new file mode 100644
index 0000000..8e4924d
@@ -0,0 +1,8 @@
+ccflags-y := -I$(CURDIR)/drivers/crypto/qat/qat_common
+obj-$(CONFIG_CRYPTO_DEV_QAT_DH895xCC) += qat_dh895xcc.o
+qat_dh895xcc-objs := adf_drv.o \
+		adf_isr.o \
+		adf_dh895xcc_hw_data.o \
+		adf_hw_arbiter.o \
+		qat_admin.o \
+		adf_admin.o
drivers/crypto/qat/qat_dh895xcc/adf_admin.c new file +144 -0

144 lines not on this page · raw message

drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c new file +214 -0

214 lines not on this page · raw message

drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.h new file +86 -0

86 lines not on this page · raw message

drivers/crypto/qat/qat_dh895xcc/adf_drv.c new file +448 -0

448 lines not on this page · raw message

drivers/crypto/qat/qat_dh895xcc/adf_drv.h new file +67 -0

67 lines not on this page · raw message

drivers/crypto/qat/qat_dh895xcc/adf_hw_arbiter.c new file +159 -0

159 lines not on this page · raw message

drivers/crypto/qat/qat_dh895xcc/adf_isr.c new file +266 -0

266 lines not on this page · raw message

drivers/crypto/qat/qat_dh895xcc/qat_admin.c new file +107 -0

107 lines not on this page · raw message

#2 lore raw

RFC PATCH v3 4/4 crypto: Update to makefiles

In reply to Tadeusz Struk

Update to makefiles etc.
Don't update the firmware/Makefile yet since there is no FW binary in the crypto repo yet. This will be added later.

v3 - removed change to ./firmware/Makefile

---

 Documentation/ioctl/ioctl-number.txt |    1 +
 MAINTAINERS                          |    6 ++++++
 drivers/crypto/Kconfig               |    1 +
 drivers/crypto/Makefile              |    1 +
 4 files changed, 9 insertions(+)
Documentation/ioctl/ioctl-number.txt +1 -0
index d7e43fa..7e240a7 100644
@@ -197,6 +197,7 @@ Code  Seq#(hex)	Include File		Comments
 					<mailto:[email protected]>
 'a'	all	linux/atm*.h, linux/sonet.h	ATM on linux
 					<http://lrcwww.epfl.ch/>
+'a'	00-0F	drivers/crypto/qat/qat_common/adf_cfg_common.h	conflict! qat driver
 'b'	00-FF				conflict! bit3 vme host bridge
 					<mailto:[email protected]>
 'c'	all	linux/cm4000_cs.h	conflict!
MAINTAINERS +6 -0
index 3467445..624a9cf 100644
@@ -7060,6 +7060,12 @@ M:	Robert Jarzmik <[email protected]>
 L:	[email protected]
 S:	Maintained
 
+QAT DRIVER
+M:      Tadeusz Struk <[email protected]>
+L:      [email protected]
+S:      Supported
+F:      drivers/crypto/qat/
+
 QIB DRIVER
 M:	Mike Marciniszyn <[email protected]>
 L:	[email protected]
drivers/crypto/Kconfig +1 -0
index f066fa2..1f20814 100644
@@ -418,4 +418,5 @@ config CRYPTO_DEV_MXS_DCP
 	  To compile this driver as a module, choose M here: the module
 	  will be called mxs-dcp.
 
+source "drivers/crypto/qat/Kconfig"
 endif # CRYPTO_HW
drivers/crypto/Makefile +1 -0
index 482f090..f996ed7 100644
@@ -23,3 +23,4 @@ obj-$(CONFIG_CRYPTO_DEV_S5P) += s5p-sss.o
 obj-$(CONFIG_CRYPTO_DEV_SAHARA) += sahara.o
 obj-$(CONFIG_CRYPTO_DEV_TALITOS) += talitos.o
 obj-$(CONFIG_CRYPTO_DEV_UX500) += ux500/
+obj-$(CONFIG_CRYPTO_DEV_QAT) += qat/
#3 lore raw
In reply to Tadeusz Struk

Hi,
I just realized that patch 1 and 2 never made it to [email protected].
The reason is that vger.kernel.org blocks messages longer than 100 000 characters.
Both my patches were bigger. I need to brake it into more patches so version 4 will be sent out soon.
Sorry for making so much noise.
Regards,
Tadeusz

Quoted 120 lines · Tadeusz Struk

Hi,
This patchset adds support for Intel(R) QuickAssist Technology (QAT) and DH895xCC hardware accelerator.
First patch adds a common infractructure that will be used by all QAT devices.
Second patch adds a firmware loader module that is used to load the microcode to the acceleration engines and start them.
Third patch adds dh895xcc hardware specific code, which hooks to the common infrastructure and provides acceleration for
the following algorithms:
authenc(hmac(sha1),cbc(aes)), authenc(hmac(sha256),cbc(aes)), authenc(hmac(sha512),cbc(aes))
Fourth patch updates makefiles etc.

More info on the hardware accelerator and the Quick Assist Technology can be found on:
https://01.org/packet-processing/intel%C2%AE-quickassist-technology-drivers-and-patches

---

Tadeusz Struk (4):
crypto: Intel(R) QAT driver framework
crypto: Intel(R) QAT FW Loader
crypto: Intel(R) QAT dh895xcc accelerator
crypto: Update to makefiles

 Documentation/ioctl/ioctl-number.txt               |    1 
 MAINTAINERS                                        |    6 
 drivers/crypto/Kconfig                             |    1 
 drivers/crypto/Makefile                            |    1 
 drivers/crypto/qat/Kconfig                         |   22 
 drivers/crypto/qat/Makefile                        |    2 
 drivers/crypto/qat/qat_common/Makefile             |   14 
 drivers/crypto/qat/qat_common/adf_accel_devices.h  |  204 +++
 drivers/crypto/qat/qat_common/adf_accel_engine.c   |  168 ++
 drivers/crypto/qat/qat_common/adf_aer.c            |  258 ++++
 drivers/crypto/qat/qat_common/adf_cfg.c            |  359 +++++
 drivers/crypto/qat/qat_common/adf_cfg.h            |   87 +
 drivers/crypto/qat/qat_common/adf_cfg_common.h     |  100 +
 drivers/crypto/qat/qat_common/adf_cfg_strings.h    |   83 +
 drivers/crypto/qat/qat_common/adf_cfg_user.h       |   94 +
 drivers/crypto/qat/qat_common/adf_common_drv.h     |  192 +++
 drivers/crypto/qat/qat_common/adf_ctl_drv.c        |  490 +++++++
 drivers/crypto/qat/qat_common/adf_dev_mgr.c        |  215 +++
 drivers/crypto/qat/qat_common/adf_init.c           |  388 ++++++
 drivers/crypto/qat/qat_common/adf_transport.c      |  565 ++++++++
 drivers/crypto/qat/qat_common/adf_transport.h      |   63 +
 .../qat/qat_common/adf_transport_access_macros.h   |  160 ++
 .../crypto/qat/qat_common/adf_transport_debug.c    |  301 ++++
 .../crypto/qat/qat_common/adf_transport_internal.h |  115 ++
 drivers/crypto/qat/qat_common/icp_qat_fw.h         |  316 +++++
 .../crypto/qat/qat_common/icp_qat_fw_init_admin.h  |  131 ++
 drivers/crypto/qat/qat_common/icp_qat_fw_la.h      |  403 ++++++
 .../qat/qat_common/icp_qat_fw_loader_handle.h      |   78 +
 drivers/crypto/qat/qat_common/icp_qat_hal.h        |  125 ++
 drivers/crypto/qat/qat_common/icp_qat_hw.h         |  305 ++++
 drivers/crypto/qat/qat_common/icp_qat_uclo.h       |  377 +++++
 drivers/crypto/qat/qat_common/qat_algs.c           | 1034 +++++++++++++++
 drivers/crypto/qat/qat_common/qat_crypto.c         |  284 ++++
 drivers/crypto/qat/qat_common/qat_crypto.h         |   83 +
 drivers/crypto/qat/qat_common/qat_hal.c            | 1402 ++++++++++++++++++++
 drivers/crypto/qat/qat_common/qat_uclo.c           | 1192 +++++++++++++++++
 drivers/crypto/qat/qat_dh895xcc/Makefile           |    8 
 drivers/crypto/qat/qat_dh895xcc/adf_admin.c        |  144 ++
 .../crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c |  214 +++
 .../crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.h |   86 +
 drivers/crypto/qat/qat_dh895xcc/adf_drv.c          |  448 ++++++
 drivers/crypto/qat/qat_dh895xcc/adf_drv.h          |   67 +
 drivers/crypto/qat/qat_dh895xcc/adf_hw_arbiter.c   |  159 ++
 drivers/crypto/qat/qat_dh895xcc/adf_isr.c          |  266 ++++
 drivers/crypto/qat/qat_dh895xcc/qat_admin.c        |  107 ++
 45 files changed, 11118 insertions(+)
 create mode 100644 drivers/crypto/qat/Kconfig
 create mode 100644 drivers/crypto/qat/Makefile
 create mode 100644 drivers/crypto/qat/qat_common/Makefile
 create mode 100644 drivers/crypto/qat/qat_common/adf_accel_devices.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_accel_engine.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_aer.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_cfg.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_cfg.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_cfg_common.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_cfg_strings.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_cfg_user.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_common_drv.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_ctl_drv.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_dev_mgr.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_init.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_transport.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_transport.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_transport_access_macros.h
 create mode 100644 drivers/crypto/qat/qat_common/adf_transport_debug.c
 create mode 100644 drivers/crypto/qat/qat_common/adf_transport_internal.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_fw.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_fw_init_admin.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_fw_la.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_fw_loader_handle.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_hal.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_hw.h
 create mode 100644 drivers/crypto/qat/qat_common/icp_qat_uclo.h
 create mode 100644 drivers/crypto/qat/qat_common/qat_algs.c
 create mode 100644 drivers/crypto/qat/qat_common/qat_crypto.c
 create mode 100644 drivers/crypto/qat/qat_common/qat_crypto.h
 create mode 100644 drivers/crypto/qat/qat_common/qat_hal.c
 create mode 100644 drivers/crypto/qat/qat_common/qat_uclo.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/Makefile
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_admin.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.h
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_drv.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_drv.h
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_hw_arbiter.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/adf_isr.c
 create mode 100644 drivers/crypto/qat/qat_dh895xcc/qat_admin.c

A message that is not in the archive (sent off-list or not yet received): [email protected]

A message that is not in the archive (sent off-list or not yet received): 804857E1F29AAC47BF68C404FC60A18465623125@ORSMSX105.amr.corp.intel.com

A message that is not in the archive (sent off-list or not yet received): 1402071084.13264.0.camel@joe-AO725

A message that is not in the archive (sent off-list or not yet received): 804857E1F29AAC47BF68C404FC60A184656232C2@ORSMSX105.amr.corp.intel.com

A message that is not in the archive (sent off-list or not yet received): 1402072268.13264.4.camel@joe-AO725

A message that is not in the archive (sent off-list or not yet received): 804857E1F29AAC47BF68C404FC60A184656254DF@ORSMSX105.amr.corp.intel.com

maintainer
#10 lore raw

PATCH 1/1 checkpatch: Fix function pointers in blank line needed after declarations test

Add a function pointer declaration check to the
test for blank line needed after declarations.

---

Quoted 6 lines · Bruce W

Review

Quoted 4 lines

WARNING: Missing a blank line after declarations
#318: FILE: drivers/crypto/qat/qat_common/adf_accel_devices.h:140:

(quoted diff) +2 -0
+	struct adf_hw_device_class *dev_class;
+	uint32_t (*get_accel_mask)(uint32_t fuse);

This one is a false positive from checkpatch

 scripts/checkpatch.pl | 4 ++++
 1 file changed, 4 insertions(+)
scripts/checkpatch.pl +4 -0
index 010b18e..f4b8911 100755
@@ -2295,6 +2295,8 @@ sub process {
 		if ($sline =~ /^\+\s+\S/ &&			#Not at char 1
 			# actual declarations
 		    ($prevline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
+			# function pointer declarations
+		     $prevline =~ /^\+\s+$Declare\s*\(\s*\*\s*$Ident\s*\)\s*[=,;:\[\(]/ ||
 			# foo bar; where foo is some local typedef or #define
 		     $prevline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
 			# known declaration macros
@@ -2307,6 +2309,8 @@ sub process {
 		      $prevline =~ /(?:\{\s*|\\)$/) &&
 			# looks like a declaration
 		    !($sline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
+			# function pointer declarations
+		      $sline =~ /^\+\s+$Declare\s*\(\s*\*\s*$Ident\s*\)\s*[=,;:\[\(]/ ||
 			# foo bar; where foo is some local typedef or #define
 		      $sline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
 			# known declaration macros